From 3612b048907a8d58867f6650dbb6d4591c27487b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 1 Aug 2025 03:23:28 +0000 Subject: [PATCH] Add timepoint_from_epoch to time utils. Signed-off-by: Jason Volk --- src/core/utils/time.rs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/core/utils/time.rs b/src/core/utils/time.rs index 8421c35d..95194e14 100644 --- a/src/core/utils/time.rs +++ b/src/core/utils/time.rs @@ -22,22 +22,37 @@ pub fn now() -> Duration { } #[inline] -pub fn parse_timepoint_ago(ago: &str) -> Result { - timepoint_ago(parse_duration(ago)?) +#[must_use] +pub fn duration_since_epoch(timepoint: SystemTime) -> Duration { + timepoint + .duration_since(UNIX_EPOCH) + .unwrap_or(Duration::ZERO) } #[inline] -pub fn timepoint_ago(duration: Duration) -> Result { - SystemTime::now() - .checked_sub(duration) - .ok_or_else(|| err!(Arithmetic("Duration {duration:?} is too large"))) +pub fn timepoint_from_epoch(duration: Duration) -> Result { + UNIX_EPOCH + .checked_add(duration) + .ok_or_else(|| err!(Arithmetic("Duration {duration:?} from epoch is too large"))) } #[inline] pub fn timepoint_from_now(duration: Duration) -> Result { SystemTime::now() .checked_add(duration) - .ok_or_else(|| err!(Arithmetic("Duration {duration:?} is too large"))) + .ok_or_else(|| err!(Arithmetic("Duration {duration:?} from now is too large"))) +} + +#[inline] +pub fn timepoint_ago(duration: Duration) -> Result { + SystemTime::now() + .checked_sub(duration) + .ok_or_else(|| err!(Arithmetic("Duration {duration:?} ago is too large"))) +} + +#[inline] +pub fn parse_timepoint_ago(ago: &str) -> Result { + timepoint_ago(parse_duration(ago)?) } #[inline]