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(()) +} | 
