app

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

commit dd1affd57a479240f320610137bbc082c25402dc
parent 66aabbbd2c4ab13e8ae6d7ea4ec8a2158393a3eb
Author: triesap <triesap@radroots.dev>
Date:   Mon, 19 Jan 2026 06:44:29 +0000

app-utils: add handle_err helper

- add handle_err logging helper
- add context tag formatting
- export handle_err helper
- add unit tests for handle_err

Diffstat:
Mcrates/utils/src/errors.rs | 26+++++++++++++++++++++++++-
Mcrates/utils/src/lib.rs | 2+-
2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/crates/utils/src/errors.rs b/crates/utils/src/errors.rs @@ -1,5 +1,7 @@ #![forbid(unsafe_code)] +use std::fmt; + use radroots_types::types::IError; pub const ERR_PREFIX_APP: &str = "error.app"; @@ -40,9 +42,19 @@ pub fn throw_err(err: impl Into<ErrInput>) -> ! { panic!("{}", err.err); } +pub fn handle_err(err: impl fmt::Display, append: Option<&str>) -> IError<String> { + let mut msg = err.to_string(); + if let Some(append) = append { + if !append.is_empty() { + msg = format!("{msg} {append}"); + } + } + IError { err: msg } +} + #[cfg(test)] mod tests { - use super::{err_msg, throw_err, ERR_PREFIX_APP, ERR_PREFIX_UTILS}; + use super::{err_msg, handle_err, throw_err, ERR_PREFIX_APP, ERR_PREFIX_UTILS}; use radroots_types::types::IError; #[test] @@ -70,6 +82,18 @@ mod tests { } #[test] + fn handle_err_adds_append() { + let err = handle_err("boom", Some("context")); + assert_eq!(err.err, "boom context"); + } + + #[test] + fn handle_err_without_append() { + let err = handle_err("boom", None); + assert_eq!(err.err, "boom"); + } + + #[test] fn error_prefixes_match_spec() { assert_eq!(ERR_PREFIX_APP, "error.app"); assert_eq!(ERR_PREFIX_UTILS, "error.app.utils"); diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs @@ -4,5 +4,5 @@ pub mod error; pub mod errors; pub mod types; -pub use errors::{err_msg, throw_err, ERR_PREFIX_APP, ERR_PREFIX_UTILS}; +pub use errors::{err_msg, handle_err, throw_err, ERR_PREFIX_APP, ERR_PREFIX_UTILS}; pub use types::{resolve_err, resolve_ok, ResolveError, ResultPass};