From db0c778ead81ae44e36ae8fe646ba01b76a2fcf8 Mon Sep 17 00:00:00 2001 From: Ben Ludewig Date: Tue, 30 Mar 2021 17:41:19 +0200 Subject: [PATCH] Serialize u128 TraceId as LE bytes (#344) --- tarpc/src/trace.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tarpc/src/trace.rs b/tarpc/src/trace.rs index b3f03da..d889b28 100644 --- a/tarpc/src/trace.rs +++ b/tarpc/src/trace.rs @@ -48,7 +48,7 @@ pub struct Context { /// same trace ID. #[derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy)] #[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))] -pub struct TraceId(u128); +pub struct TraceId(#[cfg_attr(feature = "serde1", serde(with = "u128_serde"))] u128); /// A 64-bit identifier of a span within a trace. The identifier is unique within the span's trace. #[derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy)] @@ -95,3 +95,22 @@ impl fmt::Display for SpanId { Ok(()) } } + +#[cfg(feature = "serde1")] +mod u128_serde { + pub fn serialize(u: &u128, serializer: S) -> Result + where + S: serde::Serializer, + { + serde::Serialize::serialize(&u.to_le_bytes(), serializer) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + Ok(u128::from_le_bytes(serde::Deserialize::deserialize( + deserializer, + )?)) + } +}