pub(crate) mod humantime {
use std::time::Duration;
use serde::{Deserialize, Deserializer, Serializer};
#[allow(clippy::ref_option)] pub(crate) fn serialize<S>(
duration: &Option<Duration>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match duration {
Some(duration) => {
serializer.serialize_str(&humantime::format_duration(*duration).to_string())
}
None => serializer.serialize_none(),
}
}
pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Option<Duration>, D::Error>
where
D: Deserializer<'de>,
{
let s = Option::<String>::deserialize(deserializer)?;
match s {
None => Ok(None),
Some(value) => humantime::parse_duration(&value)
.map(Some)
.map_err(serde::de::Error::custom),
}
}
}