1use prost::bytes::Bytes;
2
3use alloc::string::String;
4use alloc::string::ToString;
5
6macro_rules! ser_scalar_value {
7 ($typ: ty) => {
8 impl serde::Serialize for $typ {
9 fn serialize<S>(&self, ser: S) -> Result<S::Ok, S::Error>
10 where
11 S: serde::Serializer,
12 {
13 self.value.serialize(ser)
14 }
15 }
16 };
17}
18macro_rules! deser_scalar_value {
19 ($typ: ty) => {
20 impl<'de> serde::Deserialize<'de> for $typ {
21 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
22 where
23 D: serde::Deserializer<'de>,
24 {
25 let value = serde::Deserialize::deserialize(deserializer)?;
26 Ok(Self { value })
27 }
28 }
29 };
30}
31macro_rules! ser_bytes_value {
32 ($typ: ty) => {
33 impl serde::Serialize for $typ {
34 fn serialize<S>(&self, ser: S) -> Result<S::Ok, S::Error>
35 where
36 S: serde::Serializer,
37 {
38 use pbjson::private::base64::engine::Engine;
39 let value =
40 pbjson::private::base64::engine::general_purpose::STANDARD.encode(&self.value);
41 value.serialize(ser)
42 }
43 }
44 };
45}
46macro_rules! deser_bytes_value {
47 ($typ: ty) => {
48 impl<'de> serde::Deserialize<'de> for $typ {
49 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
50 where
51 D: serde::Deserializer<'de>,
52 {
53 let value = pbjson::private::BytesDeserialize::deserialize(deserializer)?.0;
54 Ok(Self { value })
55 }
56 }
57 };
58}
59macro_rules! ser_long_value {
60 ($typ: ty) => {
61 impl serde::Serialize for $typ {
62 fn serialize<S>(&self, ser: S) -> Result<S::Ok, S::Error>
63 where
64 S: serde::Serializer,
65 {
66 let value = self.value.to_string();
67 value.serialize(ser)
68 }
69 }
70 };
71}
72macro_rules! deser_number_value {
73 ($typ: ty) => {
74 impl<'de> serde::Deserialize<'de> for $typ {
75 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
76 where
77 D: serde::Deserializer<'de>,
78 {
79 let value = pbjson::private::NumberDeserialize::deserialize(deserializer)?.0;
80 Ok(Self { value })
81 }
82 }
83 };
84}
85
86macro_rules! convert_scalar_value {
87 ($scalar: ty, $typ: ty) => {
88 impl From<$scalar> for $typ {
89 fn from(value: $scalar) -> Self {
90 Self { value }
91 }
92 }
93 };
94}
95
96ser_scalar_value!(crate::BoolValue);
97deser_scalar_value!(crate::BoolValue);
98ser_bytes_value!(crate::BytesValue);
99deser_bytes_value!(crate::BytesValue);
100ser_scalar_value!(crate::DoubleValue);
101deser_number_value!(crate::DoubleValue);
102ser_scalar_value!(crate::FloatValue);
103deser_number_value!(crate::FloatValue);
104ser_scalar_value!(crate::Int32Value);
105deser_number_value!(crate::Int32Value);
106ser_long_value!(crate::Int64Value);
107deser_number_value!(crate::Int64Value);
108ser_scalar_value!(crate::StringValue);
109deser_scalar_value!(crate::StringValue);
110ser_scalar_value!(crate::UInt32Value);
111deser_number_value!(crate::UInt32Value);
112ser_long_value!(crate::UInt64Value);
113deser_number_value!(crate::UInt64Value);
114
115convert_scalar_value!(bool, crate::BoolValue);
116convert_scalar_value!(Bytes, crate::BytesValue);
117convert_scalar_value!(f64, crate::DoubleValue);
118convert_scalar_value!(f32, crate::FloatValue);
119convert_scalar_value!(i32, crate::Int32Value);
120convert_scalar_value!(i64, crate::Int64Value);
121convert_scalar_value!(String, crate::StringValue);
122convert_scalar_value!(u32, crate::UInt32Value);
123convert_scalar_value!(u64, crate::UInt64Value);