derse/impls/
duration.rs

1use crate::*;
2use std::time::Duration;
3
4impl Serialize for Duration {
5    fn serialize_to<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
6        self.subsec_nanos().serialize_to(serializer)?;
7        self.as_secs().serialize_to(serializer)
8    }
9}
10
11impl<'a> Deserialize<'a> for Duration {
12    fn deserialize_from<D: Deserializer<'a>>(buf: &mut D) -> Result<Self>
13    where
14        Self: Sized,
15    {
16        let secs = u64::deserialize_from(buf)?;
17        let nanos = u32::deserialize_from(buf)?;
18        Ok(Self::new(secs, nanos))
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_duration() {
28        let ser = Duration::from_millis(12315);
29        let bytes = ser.serialize::<DownwardBytes>().unwrap();
30        assert_eq!(bytes.len(), 12);
31
32        let der = Duration::deserialize(&bytes[..]).unwrap();
33        assert_eq!(ser, der);
34    }
35}