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