app

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

commit 34d4b012ac86400e10c425a404c1405b8eeb9876
parent 4259d5cbd1ce07bb4043e792d982cb9a28831811
Author: triesap <triesap@radroots.dev>
Date:   Mon, 19 Jan 2026 06:53:04 +0000

app-utils: add parse number helpers

- add parse_int with fallback handling
- add parse_float with fallback handling
- export parse helpers from utils crate
- add unit tests for parse fallbacks

Diffstat:
Mcrates/utils/src/lib.rs | 2++
Acrates/utils/src/numbers/mod.rs | 34++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs @@ -2,11 +2,13 @@ pub mod error; pub mod errors; +pub mod numbers; 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 numbers::{parse_float, parse_int}; 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/numbers/mod.rs b/crates/utils/src/numbers/mod.rs @@ -0,0 +1,34 @@ +#![forbid(unsafe_code)] + +pub fn parse_int(value: &str, fallback: i64) -> i64 { + value.trim().parse::<i64>().unwrap_or(fallback) +} + +pub fn parse_float(value: &str, fallback: f64) -> f64 { + value.trim().parse::<f64>().unwrap_or(fallback) +} + +#[cfg(test)] +mod tests { + use super::{parse_float, parse_int}; + + #[test] + fn parse_int_returns_fallback_on_invalid() { + assert_eq!(parse_int("boom", 42), 42); + } + + #[test] + fn parse_int_parses_numbers() { + assert_eq!(parse_int("123", 0), 123); + } + + #[test] + fn parse_float_returns_fallback_on_invalid() { + assert_eq!(parse_float("boom", 1.5), 1.5); + } + + #[test] + fn parse_float_parses_numbers() { + assert_eq!(parse_float("3.5", 0.0), 3.5); + } +}