use std::time::SystemTime;
pub fn serialize<S>(value: &Option<SystemTime>, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
match value {
Some(t) => {
let dt: chrono::DateTime<chrono::Utc> = (*t).into();
serializer.serialize_str(&dt.to_rfc3339_opts(chrono::SecondsFormat::AutoSi, true))
}
None => serializer.serialize_none(),
}
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<SystemTime>, D::Error>
where
D: serde::Deserializer<'de>,
{
let opt: Option<String> = serde::Deserialize::deserialize(deserializer)?;
match opt {
Some(s) => chrono::DateTime::parse_from_rfc3339(&s)
.map(|dt| Some(dt.with_timezone(&chrono::Utc).into()))
.map_err(serde::de::Error::custom),
None => Ok(None),
}
}