cometbft_proto/serializers/
bytes.rs1pub mod hexstring {
5 use serde::{Deserialize, Deserializer, Serializer};
6 use subtle_encoding::hex;
7
8 use crate::prelude::*;
9
10 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
12 where
13 D: Deserializer<'de>,
14 {
15 let string = Option::<String>::deserialize(deserializer)?.unwrap_or_default();
16 hex::decode_upper(&string)
17 .or_else(|_| hex::decode(&string))
18 .map_err(serde::de::Error::custom)
19 }
20
21 pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
23 where
24 S: Serializer,
25 T: AsRef<[u8]>,
26 {
27 let hex_bytes = hex::encode_upper(value.as_ref());
28 let hex_string = String::from_utf8(hex_bytes).map_err(serde::ser::Error::custom)?;
29 serializer.serialize_str(&hex_string)
30 }
31}
32
33pub mod base64string {
35 use serde::{Deserialize, Deserializer, Serializer};
36 use subtle_encoding::base64;
37
38 use crate::prelude::*;
39
40 pub fn deserialize<'de, D, T>(deserializer: D) -> Result<T, D::Error>
42 where
43 D: Deserializer<'de>,
44 Vec<u8>: Into<T>,
45 {
46 let s = Option::<String>::deserialize(deserializer)?.unwrap_or_default();
47 let v = base64::decode(s).map_err(serde::de::Error::custom)?;
48 Ok(v.into())
49 }
50
51 pub fn deserialize_to_string<'de, D>(deserializer: D) -> Result<String, D::Error>
53 where
54 D: Deserializer<'de>,
55 {
56 let s = Option::<String>::deserialize(deserializer)?.unwrap_or_default();
57 String::from_utf8(base64::decode(s).map_err(serde::de::Error::custom)?)
58 .map_err(serde::de::Error::custom)
59 }
60
61 pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
63 where
64 S: Serializer,
65 T: AsRef<[u8]>,
66 {
67 let base64_bytes = base64::encode(value.as_ref());
68 let base64_string = String::from_utf8(base64_bytes).map_err(serde::ser::Error::custom)?;
69 serializer.serialize_str(&base64_string)
70 }
71}
72
73pub mod vec_base64string {
75 use serde::{Deserialize, Deserializer, Serializer};
76 use subtle_encoding::base64;
77
78 use crate::prelude::*;
79
80 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
82 where
83 D: Deserializer<'de>,
84 {
85 Option::<Vec<String>>::deserialize(deserializer)?
86 .unwrap_or_default()
87 .into_iter()
88 .map(|s| base64::decode(s).map_err(serde::de::Error::custom))
89 .collect()
90 }
91
92 pub fn serialize<S, T>(value: &[T], serializer: S) -> Result<S::Ok, S::Error>
94 where
95 S: Serializer,
96 T: AsRef<[u8]>,
97 {
98 let base64_strings = value
99 .iter()
100 .map(|v| {
101 String::from_utf8(base64::encode(v.as_ref())).map_err(serde::ser::Error::custom)
102 })
103 .collect::<Result<Vec<String>, S::Error>>()?;
104 serializer.collect_seq(base64_strings)
105 }
106}
107
108pub mod option_base64string {
110 use serde::{Deserialize, Deserializer, Serializer};
111 use subtle_encoding::base64;
112
113 use crate::prelude::*;
114
115 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
117 where
118 D: Deserializer<'de>,
119 {
120 let s = Option::<String>::deserialize(deserializer)?.unwrap_or_default();
121 base64::decode(s).map_err(serde::de::Error::custom)
122 }
123
124 pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
126 where
127 S: Serializer,
128 T: AsRef<[u8]>,
129 {
130 let base64_bytes = base64::encode(value.as_ref());
131 let base64_string = String::from_utf8(base64_bytes).map_err(serde::ser::Error::custom)?;
132 serializer.serialize_str(&base64_string)
133 }
134}
135
136pub mod string {
138 use serde::{Deserialize, Deserializer, Serializer};
139
140 use crate::prelude::*;
141
142 #[allow(dead_code)]
144 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
145 where
146 D: Deserializer<'de>,
147 {
148 let string = Option::<String>::deserialize(deserializer)?.unwrap_or_default();
149 Ok(string.as_bytes().to_vec())
150 }
151
152 #[allow(dead_code)]
154 pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
155 where
156 S: Serializer,
157 T: AsRef<[u8]>,
158 {
159 let string =
160 String::from_utf8(value.as_ref().to_vec()).map_err(serde::ser::Error::custom)?;
161 serializer.serialize_str(&string)
162 }
163}