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}