Files
cli/vendor/wasip3/wit/deps/clocks.wit

162 lines
6.2 KiB
Plaintext
Raw Normal View History

package wasi:clocks@0.3.0-rc-2026-01-06;
/// This interface common types used throughout wasi:clocks.
@since(version = 0.3.0-rc-2026-01-06)
interface types {
/// A duration of time, in nanoseconds.
@since(version = 0.3.0-rc-2026-01-06)
type duration = u64;
}
/// WASI Monotonic Clock is a clock API intended to let users measure elapsed
/// time.
///
/// It is intended to be portable at least between Unix-family platforms and
/// Windows.
///
/// A monotonic clock is a clock which has an unspecified initial value, and
/// successive reads of the clock will produce non-decreasing values.
@since(version = 0.3.0-rc-2026-01-06)
interface monotonic-clock {
use types.{duration};
/// A mark on a monotonic clock is a number of nanoseconds since an
/// unspecified initial value, and can only be compared to instances from
/// the same monotonic-clock.
@since(version = 0.3.0-rc-2026-01-06)
type mark = u64;
/// Read the current value of the clock.
///
/// The clock is monotonic, therefore calling this function repeatedly will
/// produce a sequence of non-decreasing values.
///
/// For completeness, this function traps if it's not possible to represent
/// the value of the clock in a `mark`. Consequently, implementations
/// should ensure that the starting time is low enough to avoid the
/// possibility of overflow in practice.
@since(version = 0.3.0-rc-2026-01-06)
now: func() -> mark;
/// Query the resolution of the clock. Returns the duration of time
/// corresponding to a clock tick.
@since(version = 0.3.0-rc-2026-01-06)
get-resolution: func() -> duration;
/// Wait until the specified mark has occurred.
@since(version = 0.3.0-rc-2026-01-06)
wait-until: async func(when: mark);
/// Wait for the specified duration to elapse.
@since(version = 0.3.0-rc-2026-01-06)
wait-for: async func(how-long: duration);
}
/// WASI System Clock is a clock API intended to let users query the current
/// time. The clock is not necessarily monotonic as it may be reset.
///
/// It is intended to be portable at least between Unix-family platforms and
/// Windows.
///
/// External references may be reset, so this clock is not necessarily
/// monotonic, making it unsuitable for measuring elapsed time.
///
/// It is intended for reporting the current date and time for humans.
@since(version = 0.3.0-rc-2026-01-06)
interface system-clock {
use types.{duration};
/// An "instant", or "exact time", is a point in time without regard to any
/// time zone: just the time since a particular external reference point,
/// often called an "epoch".
///
/// Here, the epoch is 1970-01-01T00:00:00Z, also known as
/// [POSIX's Seconds Since the Epoch], also known as [Unix Time].
///
/// Note that even if the seconds field is negative, incrementing
/// nanoseconds always represents moving forwards in time.
/// For example, `{ -1 seconds, 999999999 nanoseconds }` represents the
/// instant one nanosecond before the epoch.
/// For more on various different ways to represent time, see
/// https://tc39.es/proposal-temporal/docs/timezone.html
///
/// [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16
/// [Unix Time]: https://en.wikipedia.org/wiki/Unix_time
@since(version = 0.3.0-rc-2026-01-06)
record instant {
seconds: s64,
nanoseconds: u32,
}
/// Read the current value of the clock.
///
/// This clock is not monotonic, therefore calling this function repeatedly
/// will not necessarily produce a sequence of non-decreasing values.
///
/// The nanoseconds field of the output is always less than 1000000000.
@since(version = 0.3.0-rc-2026-01-06)
now: func() -> instant;
/// Query the resolution of the clock. Returns the smallest duration of time
/// that the implementation permits distinguishing.
@since(version = 0.3.0-rc-2026-01-06)
get-resolution: func() -> duration;
}
@unstable(feature = clocks-timezone)
interface timezone {
@unstable(feature = clocks-timezone)
use system-clock.{instant};
/// Return the IANA identifier of the currently configured timezone. This
/// should be an identifier from the IANA Time Zone Database.
///
/// For displaying to a user, the identifier should be converted into a
/// localized name by means of an internationalization API.
///
/// If the implementation does not expose an actual timezone, or is unable
/// to provide mappings from times to deltas between the configured timezone
/// and UTC, or determining the current timezone fails, or the timezone does
/// not have an IANA identifier, this returns nothing.
@unstable(feature = clocks-timezone)
iana-id: func() -> option<string>;
/// The number of nanoseconds difference between UTC time and the local
/// time of the currently configured timezone, at the exact time of
/// `instant`.
///
/// The magnitude of the returned value will always be less than
/// 86,400,000,000,000 which is the number of nanoseconds in a day
/// (24*60*60*1e9).
///
/// If the implementation does not expose an actual timezone, or is unable
/// to provide mappings from times to deltas between the configured timezone
/// and UTC, or determining the current timezone fails, this returns
/// nothing.
@unstable(feature = clocks-timezone)
utc-offset: func(when: instant) -> option<s64>;
/// Returns a string that is suitable to assist humans in debugging whether
/// any timezone is available, and if so, which. This may be the same string
/// as `iana-id`, or a formatted representation of the UTC offset such as
/// `-04:00`, or something else.
///
/// WARNING: The returned string should not be consumed mechanically! It may
/// change across platforms, hosts, or other implementation details. Parsing
/// this string is a major platform-compatibility hazard.
@unstable(feature = clocks-timezone)
to-debug-string: func() -> string;
}
@since(version = 0.3.0-rc-2026-01-06)
world imports {
@since(version = 0.3.0-rc-2026-01-06)
import types;
@since(version = 0.3.0-rc-2026-01-06)
import monotonic-clock;
@since(version = 0.3.0-rc-2026-01-06)
import system-clock;
@unstable(feature = clocks-timezone)
import timezone;
}