Skip to content

Commit 695fb9f

Browse files
committed
fix
1 parent fb73a78 commit 695fb9f

File tree

3 files changed

+42
-7
lines changed

3 files changed

+42
-7
lines changed

opentelemetry-proto/src/proto.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pub(crate) mod serializers {
66
use crate::tonic::common::v1::any_value::{self, Value};
77
use crate::tonic::common::v1::AnyValue;
88
use serde::de::{self, MapAccess, Visitor};
9-
use serde::ser::{SerializeMap, SerializeStruct};
9+
use serde::ser::{SerializeMap, SerializeSeq, SerializeStruct};
1010
use serde::{Deserialize, Deserializer, Serialize, Serializer};
1111
use std::fmt;
1212

@@ -174,6 +174,30 @@ pub(crate) mod serializers {
174174
s.parse::<u64>().map_err(de::Error::custom)
175175
}
176176

177+
pub fn serialize_vec_u64_to_string<S>(value: &[u64], serializer: S) -> Result<S::Ok, S::Error>
178+
where
179+
S: Serializer,
180+
{
181+
let s = value.iter()
182+
.map(|v| v.to_string())
183+
.collect::<Vec<_>>();
184+
let mut sq = serializer.serialize_seq(Some(s.len()))?;
185+
for v in value {
186+
sq.serialize_element(&v.to_string())?;
187+
}
188+
sq.end()
189+
}
190+
191+
pub fn deserialize_vec_string_to_vec_u64<'de, D>(deserializer: D) -> Result<Vec<u64>, D::Error>
192+
where
193+
D: Deserializer<'de>,
194+
{
195+
let s: Vec<String> = Deserialize::deserialize(deserializer)?;
196+
s.into_iter()
197+
.map(|v| v.parse::<u64>().map_err(de::Error::custom))
198+
.collect()
199+
}
200+
177201
pub fn serialize_i64_to_string<S>(value: &i64, serializer: S) -> Result<S::Ok, S::Error>
178202
where
179203
S: Serializer,

opentelemetry-proto/src/proto/tonic/opentelemetry.proto.profiles.v1development.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ pub struct Profile {
124124
#[cfg_attr(
125125
feature = "with-serde",
126126
serde(
127-
serialize_with = "crate::proto::serializers::serialize_u64_to_string",
128-
deserialize_with = "crate::proto::serializers::deserialize_string_to_u64"
127+
serialize_with = "crate::proto::serializers::serialize_i64_to_string",
128+
deserialize_with = "crate::proto::serializers::deserialize_string_to_i64"
129129
)
130130
)]
131131
pub time_nanos: i64,
@@ -275,8 +275,8 @@ pub struct Sample {
275275
#[cfg_attr(
276276
feature = "with-serde",
277277
serde(
278-
serialize_with = "crate::proto::serializers::serialize_u64_to_string",
279-
deserialize_with = "crate::proto::serializers::deserialize_string_to_u64"
278+
serialize_with = "crate::proto::serializers::serialize_vec_u64_to_string",
279+
deserialize_with = "crate::proto::serializers::deserialize_vec_string_to_vec_u64"
280280
)
281281
)]
282282
pub timestamps_unix_nano: ::prost::alloc::vec::Vec<u64>,

opentelemetry-proto/tests/grpc_build.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,23 @@ fn build_tonic() {
109109
"metrics.v1.HistogramDataPoint.time_unix_nano",
110110
"metrics.v1.NumberDataPoint.start_time_unix_nano",
111111
"metrics.v1.NumberDataPoint.time_unix_nano",
112-
"profiles.v1development.Sample.timestamps_unix_nano",
113-
"profiles.v1development.Profile.time_nanos",
114112
] {
115113
builder = builder
116114
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_u64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_string_to_u64\"))]")
117115
}
116+
for path in [
117+
"profiles.v1development.Profile.time_nanos",
118+
] {
119+
builder = builder
120+
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_i64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_string_to_i64\"))]")
121+
}
122+
for path in [
123+
"profiles.v1development.Sample.timestamps_unix_nano",
124+
] {
125+
builder = builder
126+
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_vec_u64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_vec_string_to_vec_u64\"))]")
127+
}
128+
118129

119130
// special serializer and deserializer for value
120131
// The Value::value field must be hidden

0 commit comments

Comments
 (0)