pub(crate) mod net_error;
pub mod random;
pub mod redact;
#[allow(clippy::cast_possible_truncation)] pub(crate) fn now_ms() -> u64 {
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as u64
}
pub(crate) fn ms_to_i64(ms: u64) -> i64 {
i64::try_from(ms).unwrap_or(i64::MAX)
}
pub(crate) fn now_ms_i64() -> i64 {
ms_to_i64(now_ms())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ms_to_i64_saturates_instead_of_wrapping() {
assert_eq!(ms_to_i64(0), 0);
assert_eq!(ms_to_i64(1_700_000_000_000), 1_700_000_000_000);
let max = u64::try_from(i64::MAX).unwrap();
assert_eq!(ms_to_i64(max), i64::MAX);
assert_eq!(ms_to_i64(max + 1), i64::MAX);
assert_eq!(ms_to_i64(u64::MAX), i64::MAX);
assert!(now_ms_i64() > 0);
}
}