#![warn(
rust_2018_idioms,
unreachable_pub,
// missing_debug_implementations,
// missing_docs,
)]
#![allow(
warnings,
missing_docs,
type_alias_bounds,
clippy::type_complexity,
clippy::borrow_interior_mutable_const,
clippy::needless_doctest_main,
clippy::too_many_arguments,
clippy::new_without_default
)]
pub mod delay_queue;
pub use std::time::Duration;
pub use clock::clock_util::{pause, resume};
#[doc(inline)]
pub use delay_queue::DelayQueue;
pub use delay::{delay_for, delay_until, Delay};
pub use error::Error;
pub use self::instant::Instant;
pub use interval::{interval, interval_at, Interval};
#[doc(inline)]
pub use timeout::{timeout, timeout_at, Elapsed, Timeout};
pub use throttle::{throttle, Throttle};
mod clock;
mod error;
mod delay;
mod instant;
mod interval;
mod throttle;
mod timeout;
mod wheel;
pub(crate) use self::clock::Clock;
pub(crate) mod driver;
enum Round {
Up,
Down,
}
#[inline]
fn ms(duration: Duration, round: Round) -> u64 {
const NANOS_PER_MILLI: u32 = 1_000_000;
const MILLIS_PER_SEC: u64 = 1_000;
let millis = match round {
Round::Up => (duration.subsec_nanos() + NANOS_PER_MILLI - 1) / NANOS_PER_MILLI,
Round::Down => duration.subsec_millis(),
};
duration
.as_secs()
.saturating_mul(MILLIS_PER_SEC)
.saturating_add(u64::from(millis))
}