Add Instant::try_from_* constructor functions

This commit is contained in:
Sebastian Scholz 2025-03-07 19:32:42 +01:00
parent 7c49f482d7
commit 2ceb3a721c
No known key found for this signature in database
GPG Key ID: E0D5705024FDABF3

View File

@ -50,6 +50,37 @@ impl Instant {
}
}
/// Try to create an Instant from a microsecond count since system boot.
/// Fails if the number of microseconds is too large.
pub const fn try_from_micros(micros: u64) -> Option<Self> {
let Some(value) = micros.checked_mul(TICK_HZ / GCD_1M) else {
return None;
};
Some(Self {
ticks: value / (1_000_000 / GCD_1M),
})
}
/// Try to create an Instant from a millisecond count since system boot.
/// Fails if the number of milliseconds is too large.
pub const fn try_from_millis(millis: u64) -> Option<Self> {
let Some(value) = millis.checked_mul(TICK_HZ / GCD_1K) else {
return None;
};
Some(Self {
ticks: value / (1000 / GCD_1K),
})
}
/// Try to create an Instant from a second count since system boot.
/// Fails if the number of seconds is too large.
pub const fn try_from_secs(seconds: u64) -> Option<Self> {
let Some(ticks) = seconds.checked_mul(TICK_HZ) else {
return None;
};
Some(Self { ticks })
}
/// Tick count since system boot.
pub const fn as_ticks(&self) -> u64 {
self.ticks