From aa265f7ca4ee5f6b15cce83a235cf5f9c4317cfc Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sun, 8 Sep 2024 04:39:27 +0000 Subject: [PATCH] add err log trait to Result Signed-off-by: Jason Volk --- src/core/error/log.rs | 33 +++++++++++++++--- src/core/result.rs | 4 ++- src/core/result/inspect_log.rs | 60 ++++++++++++++++++++++++++++++++ src/core/result/log_debug_err.rs | 36 +++++++++++++++++++ src/core/result/log_err.rs | 36 +++++++++++++++++++ 5 files changed, 163 insertions(+), 6 deletions(-) create mode 100644 src/core/result/inspect_log.rs create mode 100644 src/core/result/log_debug_err.rs create mode 100644 src/core/result/log_err.rs diff --git a/src/core/error/log.rs b/src/core/error/log.rs index c272bf73..60bd7014 100644 --- a/src/core/error/log.rs +++ b/src/core/error/log.rs @@ -1,7 +1,8 @@ use std::{convert::Infallible, fmt}; +use tracing::Level; + use super::Error; -use crate::{debug_error, error}; #[inline] pub fn else_log(error: E) -> Result @@ -64,11 +65,33 @@ where } #[inline] -pub fn inspect_log(error: &E) { - error!("{error}"); +pub fn inspect_log(error: &E) { inspect_log_level(error, Level::ERROR); } + +#[inline] +pub fn inspect_debug_log(error: &E) { inspect_debug_log_level(error, Level::ERROR); } + +#[inline] +pub fn inspect_log_level(error: &E, level: Level) { + use crate::{debug, error, info, trace, warn}; + + match level { + Level::ERROR => error!("{error}"), + Level::WARN => warn!("{error}"), + Level::INFO => info!("{error}"), + Level::DEBUG => debug!("{error}"), + Level::TRACE => trace!("{error}"), + } } #[inline] -pub fn inspect_debug_log(error: &E) { - debug_error!("{error:?}"); +pub fn inspect_debug_log_level(error: &E, level: Level) { + use crate::{debug, debug_error, debug_info, debug_warn, trace}; + + match level { + Level::ERROR => debug_error!("{error:?}"), + Level::WARN => debug_warn!("{error:?}"), + Level::INFO => debug_info!("{error:?}"), + Level::DEBUG => debug!("{error:?}"), + Level::TRACE => trace!("{error:?}"), + } } diff --git a/src/core/result.rs b/src/core/result.rs index d58467cf..c3eaf95b 100644 --- a/src/core/result.rs +++ b/src/core/result.rs @@ -1,6 +1,8 @@ mod debug_inspect; +mod log_debug_err; +mod log_err; mod map_expect; -pub use self::{debug_inspect::DebugInspect, map_expect::MapExpect}; +pub use self::{debug_inspect::DebugInspect, log_debug_err::LogDebugErr, log_err::LogErr, map_expect::MapExpect}; pub type Result = std::result::Result; diff --git a/src/core/result/inspect_log.rs b/src/core/result/inspect_log.rs new file mode 100644 index 00000000..577761c5 --- /dev/null +++ b/src/core/result/inspect_log.rs @@ -0,0 +1,60 @@ +use std::fmt; + +use tracing::Level; + +use super::Result; +use crate::error; + +pub trait ErrLog +where + E: fmt::Display, +{ + fn log_err(self, level: Level) -> Self; + + fn err_log(self) -> Self + where + Self: Sized, + { + self.log_err(Level::ERROR) + } +} + +pub trait ErrDebugLog +where + E: fmt::Debug, +{ + fn log_err_debug(self, level: Level) -> Self; + + fn err_debug_log(self) -> Self + where + Self: Sized, + { + self.log_err_debug(Level::ERROR) + } +} + +impl ErrLog for Result +where + E: fmt::Display, +{ + #[inline] + fn log_err(self, level: Level) -> Self + where + Self: Sized, + { + self.inspect_err(|error| error::inspect_log_level(&error, level)) + } +} + +impl ErrDebugLog for Result +where + E: fmt::Debug, +{ + #[inline] + fn log_err_debug(self, level: Level) -> Self + where + Self: Sized, + { + self.inspect_err(|error| error::inspect_debug_log_level(&error, level)) + } +} diff --git a/src/core/result/log_debug_err.rs b/src/core/result/log_debug_err.rs new file mode 100644 index 00000000..be2000ae --- /dev/null +++ b/src/core/result/log_debug_err.rs @@ -0,0 +1,36 @@ +use std::fmt; + +use tracing::Level; + +use super::{DebugInspect, Result}; +use crate::error; + +pub trait LogDebugErr +where + E: fmt::Debug, +{ + #[must_use] + fn err_debug_log(self, level: Level) -> Self; + + #[inline] + #[must_use] + fn log_debug_err(self) -> Self + where + Self: Sized, + { + self.err_debug_log(Level::ERROR) + } +} + +impl LogDebugErr for Result +where + E: fmt::Debug, +{ + #[inline] + fn err_debug_log(self, level: Level) -> Self + where + Self: Sized, + { + self.debug_inspect_err(|error| error::inspect_debug_log_level(&error, level)) + } +} diff --git a/src/core/result/log_err.rs b/src/core/result/log_err.rs new file mode 100644 index 00000000..079571f5 --- /dev/null +++ b/src/core/result/log_err.rs @@ -0,0 +1,36 @@ +use std::fmt; + +use tracing::Level; + +use super::Result; +use crate::error; + +pub trait LogErr +where + E: fmt::Display, +{ + #[must_use] + fn err_log(self, level: Level) -> Self; + + #[inline] + #[must_use] + fn log_err(self) -> Self + where + Self: Sized, + { + self.err_log(Level::ERROR) + } +} + +impl LogErr for Result +where + E: fmt::Display, +{ + #[inline] + fn err_log(self, level: Level) -> Self + where + Self: Sized, + { + self.inspect_err(|error| error::inspect_log_level(&error, level)) + } +}