use serde::de::{Deserializer, Error, Visitor}; use std::fmt; use std::time::Duration; 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) }