diff --git a/opentelemetry-sdk/src/propagation/baggage.rs b/opentelemetry-sdk/src/propagation/baggage.rs index 78bb81a3ab..a7a7332c8b 100644 --- a/opentelemetry-sdk/src/propagation/baggage.rs +++ b/opentelemetry-sdk/src/propagation/baggage.rs @@ -1,8 +1,8 @@ use opentelemetry::{ - baggage::{BaggageExt, KeyValueMetadata}, + baggage::{BaggageExt, BaggageMetadata}, otel_warn, propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator}, - Context, + Context, Key, StringValue, }; use percent_encoding::{percent_decode_str, utf8_percent_encode, AsciiSet, CONTROLS}; use std::iter; @@ -122,10 +122,10 @@ impl TextMapPropagator for BaggagePropagator { .collect::>() .join(";"); // join with ; because we deleted all ; when calling split above - Some(KeyValueMetadata::new( - name.trim().to_owned(), - value.trim().to_string(), - decoded_props.as_str(), + Some(( + Key::from(name.trim().to_owned()), + StringValue::from(value.trim().to_owned()), + BaggageMetadata::from(decoded_props.as_str()), )) } else { otel_warn!( @@ -238,13 +238,14 @@ mod tests { } #[rustfmt::skip] - fn valid_inject_data_metadata() -> Vec<(Vec, Vec<&'static str>)> { + #[allow(clippy::type_complexity)] + fn valid_inject_data_metadata() -> Vec<(Vec<(KeyValue, BaggageMetadata)>, Vec<&'static str>)> { vec![ ( vec![ - KeyValueMetadata::new("key1", "val1", "prop1"), - KeyValue::new("key2", "val2").into(), - KeyValueMetadata::new("key3", "val3", "anykey=anyvalue"), + (KeyValue::new("key1", "val1"), BaggageMetadata::from("prop1")), + (KeyValue::new("key2", "val2"), BaggageMetadata::default()), + (KeyValue::new("key3", "val3"), BaggageMetadata::from("anykey=anyvalue")), ], vec![ "key1=val1;prop1", diff --git a/opentelemetry/CHANGELOG.md b/opentelemetry/CHANGELOG.md index dbe051e88a..9d92c66bf8 100644 --- a/opentelemetry/CHANGELOG.md +++ b/opentelemetry/CHANGELOG.md @@ -13,6 +13,7 @@ - Align `Baggage.remove()` signature with `.get()` to take the key as a reference - `Baggage` can't be retrieved from the `Context` directly anymore and needs to be accessed via `context.baggage()` - `with_baggage()` and `current_with_baggage()` override any existing `Baggage` in the `Context` + - `opentelemetry::baggage::KeyValueMetadata` is now private use instead `opentelemetry::KeyValue` with `opentelemetry::baggage::BaggageMetadata` - Changed `Context` to use a stack to properly handle out of order dropping of `ContextGuard`. This imposes a limit of `65535` nested contexts on a single thread. See #[2378](https://github.com/open-telemetry/opentelemetry-rust/pull/2284) and #[1887](https://github.com/open-telemetry/opentelemetry-rust/issues/1887). - Added additional `name: Option<&str>` parameter to the `event_enabled` method on the `Logger` trait. This allows implementations (SDK, processor, exporters) diff --git a/opentelemetry/src/baggage.rs b/opentelemetry/src/baggage.rs index 69447f5c36..68c20168e4 100644 --- a/opentelemetry/src/baggage.rs +++ b/opentelemetry/src/baggage.rs @@ -439,7 +439,7 @@ impl fmt::Display for BaggageMetadata { /// [`Baggage`] name/value pairs with their associated metadata. #[derive(Clone, Debug, PartialEq)] -pub struct KeyValueMetadata { +struct KeyValueMetadata { /// Dimension or event key pub key: Key, /// Dimension or event value @@ -448,28 +448,32 @@ pub struct KeyValueMetadata { pub metadata: BaggageMetadata, } -impl KeyValueMetadata { - /// Create a new `KeyValue` pair with metadata - pub fn new(key: K, value: V, metadata: S) -> Self - where - K: Into, - V: Into, - S: Into, - { +impl From for KeyValueMetadata { + fn from(kv: KeyValue) -> Self { KeyValueMetadata { - key: key.into(), - value: value.into(), - metadata: metadata.into(), + key: kv.key, + value: kv.value.into(), + metadata: BaggageMetadata::default(), } } } -impl From for KeyValueMetadata { - fn from(kv: KeyValue) -> Self { - KeyValueMetadata { +impl From<(KeyValue, BaggageMetadata)> for KeyValueMetadata { + fn from((kv, metadata): (KeyValue, BaggageMetadata)) -> Self { + Self { key: kv.key, value: kv.value.into(), - metadata: BaggageMetadata::default(), + metadata, + } + } +} + +impl From<(Key, StringValue, BaggageMetadata)> for KeyValueMetadata { + fn from((key, value, metadata): (Key, StringValue, BaggageMetadata)) -> Self { + Self { + key, + value, + metadata, } } }