use serde::de::{ Visitor, Error, Deserializer }; use std::time::Duration; use std::fmt; pub fn deserialize_duration<'de, D>(deserializer: D) -> Result where D: Deserializer<'de> { struct DurationVisitor; impl<'de> Visitor<'de> for DurationVisitor { type Value = Duration; fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "duration in secs") } fn visit_f32 (self, v: f32) -> Result { Ok(Duration::from_secs_f32(v)) } fn visit_f64 (self, v: f64) -> Result { Ok(Duration::from_secs_f64(v)) } } deserializer.deserialize_any(DurationVisitor) }