From 73e7e264cc996c42510d9c8e774dd46cfc160a74 Mon Sep 17 00:00:00 2001 From: syn Date: Fri, 14 Feb 2020 14:21:17 +0300 Subject: deserialize duration from floats --- src/serde_duration.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/serde_duration.rs (limited to 'src/serde_duration.rs') diff --git a/src/serde_duration.rs b/src/serde_duration.rs new file mode 100644 index 0000000..50076b0 --- /dev/null +++ b/src/serde_duration.rs @@ -0,0 +1,28 @@ +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) +} -- cgit v1.2.1-18-gbd029