use nonmax::NonMaxU32;
use std::time::Duration;
#[derive(Clone, Copy)]
pub struct FloatDuration(NonMaxU32);
impl FloatDuration {
#[must_use]
pub fn from_secs_f32(value: f32) -> Self {
Self(NonMaxU32::new(value.to_bits()).expect("value should not be NaN"))
}
#[must_use]
pub fn as_secs_f32(self) -> f32 {
f32::from_bits(self.0.get())
}
}
impl std::fmt::Debug for FloatDuration {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_tuple("FloatDuration")
.field(&Duration::from(*self))
.finish()
}
}
impl PartialEq for FloatDuration {
fn eq(&self, other: &Self) -> bool {
self.as_secs_f32() == other.as_secs_f32()
}
}
impl PartialOrd for FloatDuration {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
self.as_secs_f32().partial_cmp(&other.as_secs_f32())
}
}
impl From<Duration> for FloatDuration {
fn from(value: Duration) -> Self {
Self::from_secs_f32(value.as_secs_f32())
}
}
impl From<FloatDuration> for Duration {
fn from(value: FloatDuration) -> Self {
Duration::from_secs_f32(value.as_secs_f32())
}
}