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