1use std::time::{Duration, SystemTime, UNIX_EPOCH};
2
3const NANOS_PER_SEC: u64 = 1_000_000_000;
4
5#[inline]
7pub fn now() -> u64 {
8 SystemTime::now()
9 .duration_since(UNIX_EPOCH)
10 .expect("1970-01-01 00:00:00 UTC was {} seconds ago!")
11 .as_nanos() as u64
12}
13
14#[inline]
15pub fn dur_to_ns(dur: Duration) -> u64 {
16 dur.as_secs()
18 .saturating_mul(NANOS_PER_SEC)
19 .saturating_add(u64::from(dur.subsec_nanos()))
20}
21
22pub fn get_timeout_time(dur: Duration) -> u64 {
23 add_timeout_time(dur_to_ns(dur))
24}
25
26pub fn add_timeout_time(time: u64) -> u64 {
27 let now = now();
28 match now.checked_add(time) {
29 Some(time) => time,
30 None => u64::MAX,
32 }
33}
34
35mod generic;
36
37pub use generic::*;
38
39mod typed;
40
41pub use typed::*;
42
43#[cfg(test)]
44mod tests {
45 use crate::now;
46
47 #[test]
48 fn test() {
49 println!("{}", now());
50 }
51}