tendermint/serializers/
hash.rs1use alloc::borrow::Cow;
4
5use serde::{de, ser, Deserialize, Deserializer, Serializer};
6use subtle_encoding::hex;
7
8use crate::{hash::Algorithm, prelude::*, Hash};
9
10pub fn deserialize<'de, D>(deserializer: D) -> Result<Hash, D::Error>
12where
13 D: Deserializer<'de>,
14{
15 let hexstring = Option::<Cow<'_, str>>::deserialize(deserializer)?.unwrap_or(Cow::Borrowed(""));
16 Hash::from_hex_upper(Algorithm::Sha256, &hexstring).map_err(de::Error::custom)
17}
18
19pub fn serialize<S>(value: &Hash, serializer: S) -> Result<S::Ok, S::Error>
21where
22 S: Serializer,
23{
24 let hex_bytes = hex::encode_upper(value.as_bytes());
25 let hex_string = String::from_utf8(hex_bytes).map_err(ser::Error::custom)?;
26 serializer.serialize_some(&hex_string)
28}