use std::{
future::Future,
pin::Pin,
time::{Duration, Instant},
};
#[cfg(feature = "tokio-comp")]
mod tokio_timer;
#[cfg(feature = "async-std-comp")]
mod async_std_timer;
pub mod timer {
#[cfg(feature = "async-std-comp")]
pub use crate::utils::async_std_timer::AsyncStdTimer;
#[cfg(feature = "tokio-comp")]
pub use crate::utils::tokio_timer::TokioTimer;
}
pub trait Timer {
fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>>;
fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>>;
fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
*sleep = self.sleep_until(new_deadline);
}
}
pub trait Sleep: Send + Sync + Future<Output = ()> {}