#![cfg_attr(docsrs, feature(doc_cfg))]
use std::future::Future;
use std::time::Duration;
use std::time::Instant;
mod interval;
pub use interval::*;
mod timeout;
pub use timeout::*;
pub mod schedule;
pub use fastimer_core::MakeDelay;
pub use fastimer_core::Spawn;
pub use fastimer_core::far_future;
pub use fastimer_core::make_instant_from;
pub use fastimer_core::make_instant_from_now;
pub trait MakeDelayExt: MakeDelay {
fn timeout<F: Future>(&self, duration: Duration, fut: F) -> Timeout<F, Self::Delay> {
timeout(duration, fut, self)
}
fn timeout_at<F: Future>(&self, deadline: Instant, fut: F) -> Timeout<F, Self::Delay> {
timeout_at(deadline, fut, self)
}
fn interval(self, period: Duration) -> Interval<Self>
where
Self: Sized,
{
interval(period, self)
}
fn interval_at(self, at: Instant, period: Duration) -> Interval<Self>
where
Self: Sized,
{
interval_at(at, period, self)
}
}
impl<T: MakeDelay> MakeDelayExt for T {}
pub(crate) use self::macros::debug;
pub(crate) use self::macros::info;
#[cfg(any(test, feature = "logging"))]
mod macros {
macro_rules! debug {
(target: $target:expr, $($arg:tt)+) => (log::debug!(target: $target, $($arg)+));
($($arg:tt)+) => (log::debug!($($arg)+));
}
macro_rules! info {
(target: $target:expr, $($arg:tt)+) => (log::info!(target: $target, $($arg)+));
($($arg:tt)+) => (log::info!($($arg)+));
}
pub(crate) use debug;
pub(crate) use info;
}
#[cfg(not(any(test, feature = "logging")))]
mod macros {
macro_rules! info {
(target: $target:expr, $($arg:tt)+) => {};
($($arg:tt)+) => {};
}
macro_rules! debug {
(target: $target:expr, $($arg:tt)+) => {};
($($arg:tt)+) => {};
}
pub(crate) use debug;
pub(crate) use info;
}