Skip to content

Commit 640b886

Browse files
committed
fix serializing value
1 parent abaeaaf commit 640b886

File tree

2 files changed

+67
-66
lines changed
  • opentelemetry-otlp/examples/basic-otlp-http/src
  • opentelemetry-proto/src

2 files changed

+67
-66
lines changed

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use opentelemetry::{
33
global,
44
metrics::MetricsError,
55
trace::{TraceContextExt, TraceError, Tracer, TracerProvider as _},
6-
KeyValue,
6+
Key, KeyValue,
77
};
88
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
99
use opentelemetry_otlp::WithExportConfig;
@@ -139,7 +139,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
139139
let span = cx.span();
140140
span.add_event(
141141
"Nice operation!".to_string(),
142-
vec![KeyValue::new("bogons", "100")],
142+
vec![Key::new("bogons").i64(100)],
143143
);
144144
span.set_attribute(KeyValue::new("another.key", "yes"));
145145

opentelemetry-proto/src/proto.rs

+65-64
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ pub(crate) mod serializers {
4646

4747
// AnyValue <-> KeyValue conversion
4848
pub fn serialize_to_value<S>(value: &Option<AnyValue>, serializer: S) -> Result<S::Ok, S::Error>
49-
where
50-
S: Serializer,
49+
where
50+
S: Serializer,
5151
{
5252
// Serialize any_value::Value using its own implementation
5353
// If value is None, it will be serialized as such
5454
match value {
5555
Some(any_value) => match &any_value.value {
56-
Some(Value::IntValue(i)) => serialize_i64_to_string(i, serializer),
56+
//Some(Value::IntValue(i)) => serialize_i64_to_string(i, serializer),
5757
Some(value) => value.serialize(serializer),
5858
None => serializer.serialize_none(),
5959
},
@@ -62,76 +62,77 @@ pub(crate) mod serializers {
6262
}
6363

6464
pub fn deserialize_from_value<'de, D>(deserializer: D) -> Result<Option<AnyValue>, D::Error>
65-
where
66-
D: Deserializer<'de>,
67-
{
68-
struct ValueVisitor;
65+
where
66+
D: Deserializer<'de>,
67+
{
68+
struct ValueVisitor;
6969

70-
impl<'de> de::Visitor<'de> for ValueVisitor {
71-
type Value = AnyValue;
70+
impl<'de> de::Visitor<'de> for ValueVisitor {
71+
type Value = AnyValue;
7272

73-
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
74-
formatter.write_str("a JSON object for AnyValue")
75-
}
73+
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
74+
formatter.write_str("a JSON object for AnyValue")
75+
}
7676

77-
fn visit_map<V>(self, mut map: V) -> Result<AnyValue, V::Error>
78-
where
79-
V: de::MapAccess<'de>,
80-
{
81-
let mut value: Option<any_value::Value> = None;
82-
83-
while let Some(key) = map.next_key::<String>()? {
84-
let key_str = key.as_str();
85-
match key_str {
86-
"stringValue" => {
87-
let s = map.next_value()?;
88-
value = Some(any_value::Value::StringValue(s));
89-
},
90-
"boolValue" => {
91-
let b = map.next_value()?;
92-
value = Some(any_value::Value::BoolValue(b));
93-
},
94-
"intValue" => {
95-
let value_str = map.next_value::<String>()?;
96-
let int_value = value_str.parse::<i64>()
97-
.map_err(de::Error::custom)?;
98-
value = Some(any_value::Value::IntValue(int_value));
99-
},
100-
"doubleValue" => {
101-
let d = map.next_value()?;
102-
value = Some(any_value::Value::DoubleValue(d));
103-
},
104-
"arrayValue" => {
105-
let a = map.next_value()?;
106-
value = Some(any_value::Value::ArrayValue(a));
107-
},
108-
"kvlistValue" => {
109-
let kv = map.next_value()?;
110-
value = Some(any_value::Value::KvlistValue(kv));
111-
},
112-
"bytesValue" => {
113-
let bytes = map.next_value()?;
114-
value = Some(any_value::Value::BytesValue(bytes));
115-
},
116-
_ => {
117-
//skip unknown keys, and handle error later.
118-
continue
77+
fn visit_map<V>(self, mut map: V) -> Result<AnyValue, V::Error>
78+
where
79+
V: de::MapAccess<'de>,
80+
{
81+
let mut value: Option<any_value::Value> = None;
82+
83+
while let Some(key) = map.next_key::<String>()? {
84+
let key_str = key.as_str();
85+
match key_str {
86+
"stringValue" => {
87+
let s = map.next_value()?;
88+
value = Some(any_value::Value::StringValue(s));
89+
}
90+
"boolValue" => {
91+
let b = map.next_value()?;
92+
value = Some(any_value::Value::BoolValue(b));
93+
}
94+
"intValue" => {
95+
let value_str = map.next_value::<String>()?;
96+
let int_value = value_str.parse::<i64>().map_err(de::Error::custom)?;
97+
value = Some(any_value::Value::IntValue(int_value));
98+
}
99+
"doubleValue" => {
100+
let d = map.next_value()?;
101+
value = Some(any_value::Value::DoubleValue(d));
102+
}
103+
"arrayValue" => {
104+
let a = map.next_value()?;
105+
value = Some(any_value::Value::ArrayValue(a));
106+
}
107+
"kvlistValue" => {
108+
let kv = map.next_value()?;
109+
value = Some(any_value::Value::KvlistValue(kv));
110+
}
111+
"bytesValue" => {
112+
let bytes = map.next_value()?;
113+
value = Some(any_value::Value::BytesValue(bytes));
114+
}
115+
_ => {
116+
//skip unknown keys, and handle error later.
117+
continue;
118+
}
119119
}
120120
}
121-
}
122121

123-
if let Some(v) = value {
124-
Ok(AnyValue { value: Some(v) })
125-
} else {
126-
Err(de::Error::custom("Invalid data for AnyValue, no known keys found"))
122+
if let Some(v) = value {
123+
Ok(AnyValue { value: Some(v) })
124+
} else {
125+
Err(de::Error::custom(
126+
"Invalid data for AnyValue, no known keys found",
127+
))
128+
}
127129
}
128130
}
131+
132+
let value = deserializer.deserialize_map(ValueVisitor)?;
133+
Ok(Some(value))
129134
}
130135

131-
let value = deserializer.deserialize_map(ValueVisitor)?;
132-
Ok(Some(value))
133-
}
134-
135136
pub fn serialize_u64_to_string<S>(value: &u64, serializer: S) -> Result<S::Ok, S::Error>
136137
where
137138
S: Serializer,
@@ -155,7 +156,7 @@ where
155156
let s = value.to_string();
156157
serializer.serialize_str(&s)
157158
}
158-
159+
159160
pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result<i64, D::Error>
160161
where
161162
D: Deserializer<'de>,

0 commit comments

Comments
 (0)