#[cfg(not(target_arch = "wasm32"))]
pub use std::time::{Instant, SystemTime, UNIX_EPOCH};
#[cfg(target_arch = "wasm32")]
pub use web_time::{Instant, SystemTime, UNIX_EPOCH};
pub fn now() -> SystemTime {
SystemTime::now()
}
pub fn timestamp_secs() -> u64 {
now().duration_since(UNIX_EPOCH)
.expect("time went backwards")
.as_secs()
}
#[cfg(test)]
mod test {
use std::time::Duration;
use super::*;
#[cfg(target_arch = "wasm32")]
use wasm_bindgen_test::wasm_bindgen_test;
#[cfg(target_arch = "wasm32")]
wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
#[cfg_attr(not(target_arch = "wasm32"), test)]
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
fn timestamp_is_a_recent_unix_time() {
let ts = timestamp_secs();
assert!(ts > 1_750_000_000, "{}", ts);
}
#[cfg_attr(not(target_arch = "wasm32"), test)]
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
fn wall_clock_is_after_the_epoch() {
assert!(now().duration_since(UNIX_EPOCH).is_ok());
}
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
async fn instant_measures_elapsed_time() {
let start = Instant::now();
crate::sleep(Duration::from_millis(20)).await;
assert!(start.elapsed() >= Duration::from_millis(20), "{:?}", start.elapsed());
}
}