#[cfg(all(target_family = "wasm", target_os = "unknown"))]
pub use web_time::Instant;
#[cfg(not(all(target_family = "wasm", target_os = "unknown")))]
pub use std::time::Instant;
pub fn system_now() -> std::time::SystemTime {
#[cfg(all(target_family = "wasm", target_os = "unknown"))]
{
let since_epoch = web_time::SystemTime::now()
.duration_since(web_time::UNIX_EPOCH)
.unwrap_or_default();
std::time::UNIX_EPOCH + since_epoch
}
#[cfg(not(all(target_family = "wasm", target_os = "unknown")))]
{
std::time::SystemTime::now()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn system_now_tracks_std() {
let a = std::time::SystemTime::now();
let b = system_now();
let skew = b
.duration_since(a)
.unwrap_or_else(|e| e.duration());
assert!(skew < std::time::Duration::from_secs(1), "skew {skew:?}");
}
#[test]
fn instant_measures_forward() {
let t0 = Instant::now();
assert!(t0.elapsed() < std::time::Duration::from_secs(60));
}
}