concordium_base/
internal.rs1pub(crate) mod byte_array_hex {
2 pub fn serialize<S: serde::Serializer>(dt: &[u8], ser: S) -> Result<S::Ok, S::Error> {
4 ser.serialize_str(hex::encode(dt).as_str())
5 }
6
7 pub fn deserialize<'de, D: serde::Deserializer<'de>>(des: D) -> Result<Vec<u8>, D::Error> {
9 struct HexVisitor;
10 impl<'de> serde::de::Visitor<'de> for HexVisitor {
11 type Value = Vec<u8>;
12
13 fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14 write!(formatter, "A hex string.")
15 }
16
17 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
18 where
19 E: serde::de::Error,
20 {
21 let r = hex::decode(v).map_err(serde::de::Error::custom)?;
22 Ok(r)
23 }
24 }
25 des.deserialize_str(HexVisitor)
26 }
27}
28
29pub(crate) mod deserialize_non_default {
33 use crate::common::SerdeDeserialize;
34
35 pub fn deserialize<'de, D, A>(des: D) -> Result<A, D::Error>
36 where
37 D: serde::Deserializer<'de>,
38 A: SerdeDeserialize<'de> + Default + PartialEq + Eq,
39 {
40 let s = A::deserialize(des)?;
41 if s == A::default() {
42 return Err(serde::de::Error::custom("Expected a non-default value."));
43 }
44 Ok(s)
45 }
46}