use crate::backend::c; use crate::fd::BorrowedFd; /// `CLOCK_*` constants for use with [`clock_gettime`]. /// /// These constants are always supported at runtime, so `clock_gettime` never /// has to fail with `INVAL` due to an unsupported clock. See /// [`DynamicClockId`] for a greater set of clocks, with the caveat that not /// all of them are always supported. /// /// [`clock_gettime`]: crate::time::clock_gettime #[cfg(not(any(apple, target_os = "wasi")))] #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] #[cfg_attr(not(any(target_os = "aix", target_os = "dragonfly")), repr(i32))] #[cfg_attr(target_os = "dragonfly", repr(u64))] #[cfg_attr(target_os = "aix", repr(i64))] #[non_exhaustive] pub enum ClockId { /// `CLOCK_REALTIME` #[doc(alias = "CLOCK_REALTIME")] Realtime = bitcast!(c::CLOCK_REALTIME), /// `CLOCK_MONOTONIC` #[doc(alias = "CLOCK_MONOTONIC")] Monotonic = bitcast!(c::CLOCK_MONOTONIC), /// `CLOCK_UPTIME` #[cfg(any(freebsdlike, target_os = "openbsd"))] #[doc(alias = "CLOCK_UPTIME")] Uptime = c::CLOCK_UPTIME, /// `CLOCK_PROCESS_CPUTIME_ID` #[cfg(not(any( solarish, target_os = "netbsd", target_os = "redox", target_os = "vita" )))] #[doc(alias = "CLOCK_PROCESS_CPUTIME_ID")] ProcessCPUTime = c::CLOCK_PROCESS_CPUTIME_ID, /// `CLOCK_THREAD_CPUTIME_ID` #[cfg(not(any( solarish, target_os = "netbsd", target_os = "redox", target_os = "vita" )))] #[doc(alias = "CLOCK_THREAD_CPUTIME_ID")] ThreadCPUTime = c::CLOCK_THREAD_CPUTIME_ID, /// `CLOCK_REALTIME_COARSE` #[cfg(any(linux_kernel, target_os = "freebsd"))] #[doc(alias = "CLOCK_REALTIME_COARSE")] RealtimeCoarse = c::CLOCK_REALTIME_COARSE, /// `CLOCK_MONOTONIC_COARSE` #[cfg(any(linux_kernel, target_os = "freebsd"))] #[doc(alias = "CLOCK_MONOTONIC_COARSE")] MonotonicCoarse = c::CLOCK_MONOTONIC_COARSE, /// `CLOCK_MONOTONIC_RAW` #[cfg(linux_kernel)] #[doc(alias = "CLOCK_MONOTONIC_RAW")] MonotonicRaw = c::CLOCK_MONOTONIC_RAW, /// `CLOCK_REALTIME_ALARM` #[cfg(linux_kernel)] #[doc(alias = "CLOCK_REALTIME_ALARM")] RealtimeAlarm = bitcast!(c::CLOCK_REALTIME_ALARM), /// `CLOCK_TAI`, available on Linux >= 3.10 #[cfg(all(linux_kernel, feature = "linux_4_11"))] #[doc(alias = "CLOCK_TAI")] Tai = bitcast!(c::CLOCK_TAI), /// `CLOCK_BOOTTIME` /// /// On FreeBSD, use [`Self::Uptime`], as `CLOCK_BOOTTIME` is an alias for /// `CLOCK_UPTIME`. /// /// [`Self::Uptime`]: https://docs.rs/rustix/*/x86_64-unknown-freebsd/rustix/time/enum.ClockId.html#variant.Uptime #[cfg(any(linux_kernel, target_os = "fuchsia", target_os = "openbsd"))] #[doc(alias = "CLOCK_BOOTTIME")] Boottime = bitcast!(c::CLOCK_BOOTTIME), /// `CLOCK_BOOTTIME_ALARM` #[cfg(any(linux_kernel, target_os = "fuchsia"))] #[doc(alias = "CLOCK_BOOTTIME_ALARM")] BoottimeAlarm = bitcast!(c::CLOCK_BOOTTIME_ALARM), } /// `CLOCK_*` constants for use with [`clock_gettime`]. /// /// These constants are always supported at runtime, so `clock_gettime` never /// has to fail with `INVAL` due to an unsupported clock. See /// [`DynamicClockId`] for a greater set of clocks, with the caveat that not /// all of them are always supported. /// /// [`clock_gettime`]: crate::time::clock_gettime #[cfg(apple)] #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] #[repr(u32)] #[non_exhaustive] pub enum ClockId { /// `CLOCK_REALTIME` #[doc(alias = "CLOCK_REALTIME")] Realtime = c::CLOCK_REALTIME, /// `CLOCK_MONOTONIC` #[doc(alias = "CLOCK_MONOTONIC")] Monotonic = c::CLOCK_MONOTONIC, /// `CLOCK_PROCESS_CPUTIME_ID` #[doc(alias = "CLOCK_PROCESS_CPUTIME_ID")] ProcessCPUTime = c::CLOCK_PROCESS_CPUTIME_ID, /// `CLOCK_THREAD_CPUTIME_ID` #[doc(alias = "CLOCK_THREAD_CPUTIME_ID")] ThreadCPUTime = c::CLOCK_THREAD_CPUTIME_ID, } /// `CLOCK_*` constants for use with [`clock_gettime_dynamic`]. /// /// These constants may be unsupported at runtime, depending on the OS version, /// and `clock_gettime_dynamic` may fail with `INVAL`. See [`ClockId`] for /// clocks which are always supported at runtime. /// /// [`clock_gettime_dynamic`]: crate::time::clock_gettime_dynamic #[cfg(not(target_os = "wasi"))] #[derive(Debug, Copy, Clone)] #[non_exhaustive] pub enum DynamicClockId<'a> { /// `ClockId` values that are always supported at runtime. Known(ClockId), /// Linux dynamic clocks. Dynamic(BorrowedFd<'a>), /// `CLOCK_REALTIME_ALARM` #[cfg(linux_kernel)] #[doc(alias = "CLOCK_REALTIME_ALARM")] RealtimeAlarm, /// `CLOCK_TAI`, available on Linux >= 3.10 #[cfg(linux_kernel)] #[doc(alias = "CLOCK_TAI")] Tai, /// `CLOCK_BOOTTIME` #[cfg(any( freebsdlike, linux_kernel, target_os = "fuchsia", target_os = "openbsd" ))] #[doc(alias = "CLOCK_BOOTTIME")] Boottime, /// `CLOCK_BOOTTIME_ALARM` #[cfg(any(linux_kernel, target_os = "fuchsia"))] #[doc(alias = "CLOCK_BOOTTIME_ALARM")] BoottimeAlarm, }