1use web_time::SystemTime;
2
3pub trait SystemTimeExt {
4 fn ms_since_posix(&self) -> crate::Result<i64>;
5
6 fn from_ms_since_posix(ms: i64) -> crate::Result<SystemTime>;
7}
8
9impl SystemTimeExt for SystemTime {
10 fn ms_since_posix(&self) -> crate::Result<i64> {
11 self.duration_since(SystemTime::UNIX_EPOCH)
12 .map_err(|_| crate::Error::InvalidTime(*self))?
13 .as_millis()
14 .try_into()
15 .map_err(|_| crate::Error::InvalidTime(*self))
16 }
17
18 fn from_ms_since_posix(ms: i64) -> crate::Result<SystemTime> {
19 use std::time::Duration;
20 let ms = u64::try_from(ms).map_err(|_| {
21 crate::Error::Other(anyhow::anyhow!(
22 "Cannot convert negative milliseconds into SystemTime"
23 ))
24 })?;
25 Ok(SystemTime::UNIX_EPOCH + Duration::from_millis(ms))
26 }
27}