You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
536 B
23 lines
536 B
use serde::{de::Deserializer, Deserialize};
|
|
|
|
pub fn default_as_none<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
|
|
where
|
|
T: Default + PartialEq + Deserialize<'de>,
|
|
D: Deserializer<'de>,
|
|
{
|
|
let val = T::deserialize(deserializer)?;
|
|
if val == T::default() {
|
|
Ok(None)
|
|
} else {
|
|
Ok(Some(val))
|
|
}
|
|
}
|
|
|
|
pub fn error_as_none<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
|
|
where
|
|
T: Default + Deserialize<'de>,
|
|
D: Deserializer<'de>,
|
|
{
|
|
Ok(T::deserialize(deserializer).ok())
|
|
}
|