47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
|
|
#![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 $(,)?)+) {
|
|
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 }
|
|
}
|
|
|