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