async_wasi/snapshots/common/
clock.rs

1use crate::snapshots::{
2    common::{
3        error::Errno,
4        types::{__wasi_clockid_t, __wasi_errno_t, __wasi_timestamp_t},
5    },
6    WasiCtx,
7};
8
9pub fn wasi_clock_res_get(clock_id: __wasi_clockid_t::Type) -> Result<u64, Errno> {
10    match clock_id {
11        __wasi_clockid_t::__WASI_CLOCKID_MONOTONIC => Ok(1),
12        __wasi_clockid_t::__WASI_CLOCKID_REALTIME => Ok(1),
13        _ => Err(Errno(__wasi_errno_t::__WASI_ERRNO_BADF)),
14    }
15}
16
17pub fn wasi_clock_time_get(
18    ctx: &WasiCtx,
19    clock_id: __wasi_clockid_t::Type,
20    _precision: __wasi_timestamp_t,
21) -> Result<u64, Errno> {
22    use std::time::SystemTime;
23    match clock_id {
24        __wasi_clockid_t::__WASI_CLOCKID_REALTIME | __wasi_clockid_t::__WASI_CLOCKID_MONOTONIC => {
25            let d = SystemTime::now()
26                .duration_since(SystemTime::UNIX_EPOCH)
27                .unwrap();
28            Ok(d.as_nanos() as u64)
29        }
30        _ => Err(Errno(__wasi_errno_t::__WASI_ERRNO_NODEV)),
31    }
32}