use std::time::Duration;
#[repr(transparent)] #[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
pub struct WaitTimeout(u32);
impl WaitTimeout {
pub const DEFAULT: Self = Self(0x00000000);
pub const MIN: Self = Self(1);
pub const MAX: Self = Self(Self::FOREVER.0 - 1);
pub const FOREVER: Self = Self(0xffffffff);
#[inline(always)]
pub const fn from_raw(raw: u32) -> Self { Self(raw) }
#[inline(always)]
pub const fn from_millis_clamped(millis: u32) -> Self {
match Self(millis) {
Self::DEFAULT => Self::MIN,
Self::FOREVER => Self::MAX,
fits => fits,
}
}
pub const fn from_duration_clamped(duration: Duration) -> Self {
let millis = duration.as_millis();
if millis == Self::DEFAULT.0 as u128 {
Self::MIN
} else if millis >= u32::MAX as u128 {
Self::MAX
} else {
#[allow(clippy::cast_possible_truncation)]
Self(millis as u32)
}
}
#[inline(always)]
pub const fn to_raw(self) -> u32 { self.0 }
}
impl From<WaitTimeout> for u32 {
#[inline(always)]
fn from(x: WaitTimeout) -> Self { x.to_raw() }
}