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:
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);
+ }
+}