app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit 4259d5cbd1ce07bb4043e792d982cb9a28831811
parent 3ca35ba0aebecd4d4e9bf40e958eb13c5d64c7b1
Author: triesap <triesap@radroots.dev>
Date:   Mon, 19 Jan 2026 06:51:46 +0000

app-utils: add time helpers

- add time_now_s helper for epoch seconds
- add time_now_ms helper matching legacy behavior
- export time helpers from utils crate
- add unit test with timing tolerance

Diffstat:
Mcrates/utils/src/lib.rs | 2++
Acrates/utils/src/time/mod.rs | 31+++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs @@ -3,8 +3,10 @@ pub mod error; pub mod errors; pub mod text; +pub mod time; pub mod types; pub use errors::{err_msg, handle_err, throw_err, ERR_PREFIX_APP, ERR_PREFIX_UTILS}; pub use text::{str_cap, str_cap_words, text_dec, text_enc, ROOT_SYMBOL}; +pub use time::{time_now_ms, time_now_s}; pub use types::{resolve_err, resolve_ok, ResolveError, ResultPass}; diff --git a/crates/utils/src/time/mod.rs b/crates/utils/src/time/mod.rs @@ -0,0 +1,31 @@ +#![forbid(unsafe_code)] + +use std::time::{SystemTime, UNIX_EPOCH}; + +pub fn time_now_s() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|duration| duration.as_secs()) + .unwrap_or(0) +} + +pub fn time_now_ms() -> u64 { + time_now_s() +} + +#[cfg(test)] +mod tests { + use super::{time_now_ms, time_now_s}; + + #[test] + fn time_now_returns_seconds() { + let now_s = time_now_s(); + let now_ms = time_now_ms(); + let delta = if now_s > now_ms { + now_s - now_ms + } else { + now_ms - now_s + }; + assert!(delta <= 1); + } +}