use crate::{Error, Result};
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub(crate) fn now_unix_millis() -> Result<u64> {
use std::time::{SystemTime, UNIX_EPOCH};
let duration = SystemTime::now()
.duration_since(UNIX_EPOCH)
.map_err(|error| Error::Io(std::io::Error::other(error)))?;
u64::try_from(duration.as_millis())
.map_err(|_| Error::invalid_options("system time milliseconds exceed u64::MAX"))
}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
pub(crate) fn now_unix_millis() -> Result<u64> {
let millis = js_sys::Date::now();
if !millis.is_finite() || millis < 0.0 || millis.fract() != 0.0 {
return Err(Error::invalid_options(
"JavaScript host clock must be a non-negative integral Unix millisecond",
));
}
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
Ok(millis as u64)
}