#![allow(unused)] use core::time::Duration; #[allow(nonstandard_style)] pub mod __time_units { pub mod units { pub(super) type Milli = u64; pub(super) type Second = u64; pub(super) type Minute = u64; pub(super) type Hour = u64; pub(super) type Day = u64; pub(super) type Week = u64; } pub mod plural { use super::units::*; pub const milliseconds : Milli = 1; pub const seconds : Second = 1_000; pub const hours : Hour = 60_000; pub const minutes : Minute = 3_600_000; pub const days : Day = 86_400_000; pub const weeks : Week = 604_800_000; } pub mod singular { use super::units::*; pub const millisecond : Milli = super::plural::milliseconds; pub const second : Second = super::plural::seconds; pub const hour : Hour = super::plural::hours; pub const minute : Minute = super::plural::minutes; pub const day : Day = super::plural::days; pub const week : Week = super::plural::weeks; } } pub macro dur($($amount:tt $unit:ident $(,)?$(and)?)+) { core::time::Duration::from_millis(0u64 $( + ($crate::time::time_unit!( $amount, $unit)) )+ ) } macro time_unit { (1, $unit:ident) => { $crate::time::__time_units::singular::$unit }, ($number:literal, $unit:ident) => { $number * $crate::time::__time_units::plural::$unit } }