wasi_common/sync/
clocks.rs1use crate::clocks::{WasiClocks, WasiMonotonicClock, WasiSystemClock};
2use cap_std::time::{Duration, Instant, SystemTime};
3use cap_std::{ambient_authority, AmbientAuthority};
4use cap_time_ext::{MonotonicClockExt, SystemClockExt};
5
6pub struct SystemClock(cap_std::time::SystemClock);
7
8impl SystemClock {
9 pub fn new(ambient_authority: AmbientAuthority) -> Self {
10 SystemClock(cap_std::time::SystemClock::new(ambient_authority))
11 }
12}
13impl WasiSystemClock for SystemClock {
14 fn resolution(&self) -> Duration {
15 self.0.resolution()
16 }
17 fn now(&self, precision: Duration) -> SystemTime {
18 self.0.now_with(precision)
19 }
20}
21
22pub struct MonotonicClock(cap_std::time::MonotonicClock);
23impl MonotonicClock {
24 pub fn new(ambient_authority: AmbientAuthority) -> Self {
25 MonotonicClock(cap_std::time::MonotonicClock::new(ambient_authority))
26 }
27}
28impl WasiMonotonicClock for MonotonicClock {
29 fn resolution(&self) -> Duration {
30 self.0.resolution()
31 }
32 fn now(&self, precision: Duration) -> Instant {
33 self.0.now_with(precision)
34 }
35}
36
37pub fn clocks_ctx() -> WasiClocks {
38 WasiClocks::new()
39 .with_system(SystemClock::new(ambient_authority()))
40 .with_monotonic(MonotonicClock::new(ambient_authority()))
41}