use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub struct DurationMs(u64);
impl DurationMs {
pub const ZERO: Self = Self(0);
pub fn from_millis(ms: u64) -> Self {
Self(ms)
}
pub fn from_secs(secs: u64) -> Self {
Self(secs.saturating_mul(1000))
}
pub fn as_millis(&self) -> u64 {
self.0
}
pub fn to_std(&self) -> Duration {
Duration::from_millis(self.0)
}
}
impl From<Duration> for DurationMs {
fn from(d: Duration) -> Self {
Self(d.as_millis() as u64)
}
}
impl From<DurationMs> for Duration {
fn from(d: DurationMs) -> Self {
Duration::from_millis(d.0)
}
}
impl Default for DurationMs {
fn default() -> Self {
Self::ZERO
}
}
impl std::fmt::Display for DurationMs {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}ms", self.0)
}
}