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