#[cfg(feature = "chronoshift")]
use crate::monotonic::mono_floor;
use crate::quality::{ClockSource, SyncQuality};
use crate::timestamp::Timestamp;
#[cfg(feature = "chronoshift")]
use crate::timestamp::WallTime;
pub trait Clock {
fn now(&self) -> Timestamp;
fn quality(&self) -> SyncQuality;
fn source(&self) -> ClockSource;
}
#[cfg(feature = "chronoshift")]
impl<T: chronoshift::Clock> Clock for T {
fn now(&self) -> Timestamp {
let ns = chronoshift::Clock::now_ns(self);
let wall = u64::try_from(ns).unwrap_or(0);
Timestamp {
wall: WallTime::from_unix_nanos(wall),
mono: mono_floor(wall),
}
}
fn quality(&self) -> SyncQuality {
SyncQuality::Fallback
}
fn source(&self) -> ClockSource {
ClockSource::External
}
}