tenderdash_proto/serializers/
optional.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer};
7
8pub fn deserialize<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
10where
11 D: Deserializer<'de>,
12 T: Deserialize<'de> + Default + PartialEq,
13{
14 Ok(Option::<T>::deserialize(deserializer)?.filter(|t| t != &T::default()))
15}
16
17pub fn serialize<S, T>(value: &Option<T>, serializer: S) -> Result<S::Ok, S::Error>
19where
20 S: Serializer,
21 T: Default + Serialize,
22{
23 match value {
24 Some(v) => v.serialize(serializer),
25 None => T::default().serialize(serializer),
26 }
27}