1use std::convert::TryInto;
2
3use serde::Deserialize;
4use serde::Serialize;
5use serde::{Deserializer, Serializer};
6
7pub fn serialize<S>(bytes: &[u8; 32], serializer: S) -> Result<S::Ok, S::Error>
8where
9 S: Serializer,
10{
11 if serializer.is_human_readable() {
12 serializer.serialize_str(&hex::encode(bytes))
13 } else {
14 bytes.serialize(serializer)
15 }
16
17 }
22
23pub fn deserialize<'de, D>(deserializer: D) -> Result<[u8; 32], D::Error>
24where
25 D: Deserializer<'de>,
26{
27 if deserializer.is_human_readable() {
28 let s = String::deserialize(deserializer)?;
29 hex::decode(s)
30 .map_err(serde::de::Error::custom)?
31 .try_into()
32 .map_err(|_| serde::de::Error::custom("hexadecimal length not right"))
33 } else {
34 <[u8; 32]>::deserialize(deserializer)
35 }
36 }