Skip to main content

tendermint_proto/serializers/
time_duration.rs

1//! Serialize/deserialize core::time::Duration type from and into string:
2use core::time::Duration;
3
4use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer};
5
6use crate::prelude::*;
7use crate::serializers::cow_str::CowStr;
8
9/// Deserialize string into Duration
10pub fn deserialize<'de, D>(deserializer: D) -> Result<Duration, D::Error>
11where
12    D: Deserializer<'de>,
13{
14    let value = CowStr::deserialize(deserializer)?
15        .parse::<u64>()
16        .map_err(|e| D::Error::custom(format!("{e}")))?;
17
18    Ok(Duration::from_nanos(value))
19}
20
21/// Serialize from Duration into string
22pub fn serialize<S>(value: &Duration, serializer: S) -> Result<S::Ok, S::Error>
23where
24    S: Serializer,
25{
26    format!("{}", value.as_nanos()).serialize(serializer)
27}