tenderdash_proto/serializers/
time_duration.rs

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