use crate::{
duration::Duration, fixed_point::FixedPoint, fraction::Fraction, instant::Instant,
time_int::TimeInt, timer::param, timer::Timer,
};
use core::hash::Hash;
#[non_exhaustive]
#[derive(Debug, Eq, PartialEq, Hash)]
pub enum Error {
Unspecified,
NotRunning,
}
impl Default for Error {
fn default() -> Self {
Self::Unspecified
}
}
pub trait Clock: Sized {
type T: TimeInt + Hash;
const SCALING_FACTOR: Fraction;
fn try_now(&self) -> Result<Instant<Self>, Error>;
fn new_timer<Dur: Duration>(
&self,
duration: Dur,
) -> Timer<param::OneShot, param::Armed, Self, Dur>
where
Dur: FixedPoint,
{
Timer::<param::None, param::None, Self, Dur>::new(&self, duration)
}
}