use serde::{Deserialize, Serialize}; use std::fmt::{self, Debug}; use std::time::{Duration, SystemTime, UNIX_EPOCH}; #[cfg(target_arch = "wasm32")] use js_sys; #[derive(Copy, Clone, Default, PartialEq, Deserialize, Serialize)] pub struct Time(Duration); impl Time { pub fn now() -> Self { let now = { #[cfg(target_arch = "wasm32")] { let js_date = js_sys::Date::now() as u64; UNIX_EPOCH + Duration::from_millis(js_date) } #[cfg(not(target_arch = "wasm32"))] { SystemTime::now() } }; let duration = now.duration_since(UNIX_EPOCH).unwrap(); Time(duration) } #[inline] pub fn to_system_time(self) -> SystemTime { UNIX_EPOCH + self.0 } } impl Debug for Time { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "Time({})", &self.0.as_secs()) } }