use super::{
ClockFailure, ClockReadRefusal, HarnessClock, MeasurementReading, MeasurementTick, Reader,
RecordedDuration, Source,
};
impl HarnessClock {
#[must_use]
pub const fn reading(read: fn() -> u64) -> Self {
Self {
source: Source::Available(Reader::Infallible(read)),
}
}
#[must_use]
pub const fn fallible(read: fn() -> Result<u64, ClockReadRefusal>) -> Self {
Self {
source: Source::Available(Reader::Fallible(read)),
}
}
#[must_use]
pub const fn unavailable() -> Self {
Self {
source: Source::Unavailable,
}
}
}
impl MeasurementTick {
pub(in crate::clock) const fn admitted(nanoseconds: u64) -> Self {
Self(nanoseconds)
}
#[must_use]
pub const fn nanoseconds(self) -> u64 {
self.0
}
}
impl RecordedDuration {
#[must_use]
pub const fn recorded(nanoseconds: u64) -> Self {
Self(nanoseconds)
}
#[must_use]
pub const fn nanoseconds(self) -> u64 {
self.0
}
}
impl MeasurementReading {
#[must_use]
pub const fn duration(self) -> Option<RecordedDuration> {
match self {
Self::Observed(duration) => Some(duration),
Self::Unavailable | Self::Failed(_) => None,
}
}
#[must_use]
pub const fn failure(self) -> Option<ClockFailure> {
match self {
Self::Failed(failure) => Some(failure),
Self::Observed(_) | Self::Unavailable => None,
}
}
}