diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/time.rs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/util/time.rs b/src/util/time.rs index f88955d..d9a9f72 100644 --- a/src/util/time.rs +++ b/src/util/time.rs @@ -1,9 +1,14 @@ use anyhow::Result; +use std::thread; use std::time::SystemTime; -pub fn now() -> Result<u64> { - Ok(SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH)? +pub fn seconds_since_unix_epoch() -> Result<u64> { + Ok(seconds_since_unix_epoch_of(SystemTime::now())?) +} + +pub fn seconds_since_unix_epoch_of(time: SystemTime) -> Result<u64> { + Ok(time + .duration_since(std::time::SystemTime::UNIX_EPOCH)? .as_secs()) } @@ -31,3 +36,20 @@ fn plural(n: u64, str: &str) -> String { format!("{} {}s", n, str) } } + +/// Call the function, then sleep if necessary. +/// +/// Calling this will at least take the duration asked for in parameters. +pub fn wait_at_least<F>(f: F, d: std::time::Duration) -> Result<()> +where + F: Fn() -> Result<()>, +{ + let t1 = SystemTime::now(); + f()?; + let t2 = SystemTime::now(); + let elapsed = t2.duration_since(t1)?; + if elapsed < d { + thread::sleep(d - elapsed); + } + Ok(()) +} |