use std::time::{SystemTime, UNIX_EPOCH};
pub fn epoch_seconds() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_secs()
}
pub fn epoch_millis() -> i64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.map(|duration| duration.as_millis().min(i64::MAX as u128) as i64)
.unwrap_or(0)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn epoch_seconds_matches_epoch_millis_within_a_second() {
let seconds = epoch_seconds();
let millis = epoch_millis();
assert!((millis / 1000 - seconds as i64).abs() <= 1);
}
#[test]
fn epoch_seconds_is_after_this_codebases_epoch() {
assert!(epoch_seconds() > 1_577_836_800);
}
}