use serde::{Deserialize, Deserializer, Serialize, Serializer};
pub fn deserialize<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de> + Default + PartialEq,
{
Ok(Option::<T>::deserialize(deserializer)?.filter(|t| t != &T::default()))
}
pub fn serialize<S, T>(value: &Option<T>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
T: Default + Serialize,
{
match value {
Some(v) => serializer.serialize_some(v),
None => serializer.serialize_some(&T::default()),
}
}