use std::time::Duration;
use serde::Deserialize;
use serde::Serialize;
#[derive(Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(in crate::wire) struct DurationPayload {
pub(in crate::wire) secs: u64,
pub(in crate::wire) nanos: u32,
}
impl From<&Duration> for DurationPayload {
#[inline]
fn from(value: &Duration) -> Self {
Self {
secs: value.as_secs(),
nanos: value.subsec_nanos(),
}
}
}
impl TryFrom<DurationPayload> for Duration {
type Error = &'static str;
fn try_from(value: DurationPayload) -> Result<Self, Self::Error> {
if value.nanos >= 1_000_000_000 {
return Err("duration nanoseconds must be less than 1000000000");
}
Ok(Self::new(value.secs, value.nanos))
}
}