1 use crate::clocks::{WasiClocks, WasiMonotonicClock, WasiSystemClock};
2 use cap_std::time::{Duration, Instant, SystemTime};
3 use cap_std::{AmbientAuthority, ambient_authority};
4 use cap_time_ext::{MonotonicClockExt, SystemClockExt};
5
6 pub struct SystemClock(cap_std::time::SystemClock);
7
8 impl SystemClock {
new(ambient_authority: AmbientAuthority) -> Self9 pub fn new(ambient_authority: AmbientAuthority) -> Self {
10 SystemClock(cap_std::time::SystemClock::new(ambient_authority))
11 }
12 }
13 impl WasiSystemClock for SystemClock {
resolution(&self) -> Duration14 fn resolution(&self) -> Duration {
15 self.0.resolution()
16 }
now(&self, precision: Duration) -> SystemTime17 fn now(&self, precision: Duration) -> SystemTime {
18 self.0.now_with(precision)
19 }
20 }
21
22 pub struct MonotonicClock(cap_std::time::MonotonicClock);
23 impl MonotonicClock {
new(ambient_authority: AmbientAuthority) -> Self24 pub fn new(ambient_authority: AmbientAuthority) -> Self {
25 MonotonicClock(cap_std::time::MonotonicClock::new(ambient_authority))
26 }
27 }
28 impl WasiMonotonicClock for MonotonicClock {
resolution(&self) -> Duration29 fn resolution(&self) -> Duration {
30 self.0.resolution()
31 }
now(&self, precision: Duration) -> Instant32 fn now(&self, precision: Duration) -> Instant {
33 self.0.now_with(precision)
34 }
35 }
36
clocks_ctx() -> WasiClocks37 pub fn clocks_ctx() -> WasiClocks {
38 WasiClocks::new()
39 .with_system(SystemClock::new(ambient_authority()))
40 .with_monotonic(MonotonicClock::new(ambient_authority()))
41 }
42