add err log trait to Result
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
use std::{convert::Infallible, fmt};
|
use std::{convert::Infallible, fmt};
|
||||||
|
|
||||||
|
use tracing::Level;
|
||||||
|
|
||||||
use super::Error;
|
use super::Error;
|
||||||
use crate::{debug_error, error};
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn else_log<T, E>(error: E) -> Result<T, Infallible>
|
pub fn else_log<T, E>(error: E) -> Result<T, Infallible>
|
||||||
@@ -64,11 +65,33 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn inspect_log<E: fmt::Display>(error: &E) {
|
pub fn inspect_log<E: fmt::Display>(error: &E) { inspect_log_level(error, Level::ERROR); }
|
||||||
error!("{error}");
|
|
||||||
|
#[inline]
|
||||||
|
pub fn inspect_debug_log<E: fmt::Debug>(error: &E) { inspect_debug_log_level(error, Level::ERROR); }
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn inspect_log_level<E: fmt::Display>(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]
|
#[inline]
|
||||||
pub fn inspect_debug_log<E: fmt::Debug>(error: &E) {
|
pub fn inspect_debug_log_level<E: fmt::Debug>(error: &E, level: Level) {
|
||||||
debug_error!("{error:?}");
|
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:?}"),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
mod debug_inspect;
|
mod debug_inspect;
|
||||||
|
mod log_debug_err;
|
||||||
|
mod log_err;
|
||||||
mod map_expect;
|
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<T = (), E = crate::Error> = std::result::Result<T, E>;
|
pub type Result<T = (), E = crate::Error> = std::result::Result<T, E>;
|
||||||
|
|||||||
60
src/core/result/inspect_log.rs
Normal file
60
src/core/result/inspect_log.rs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
use tracing::Level;
|
||||||
|
|
||||||
|
use super::Result;
|
||||||
|
use crate::error;
|
||||||
|
|
||||||
|
pub trait ErrLog<T, E>
|
||||||
|
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<T, E>
|
||||||
|
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<T, E> ErrLog<T, E> for Result<T, E>
|
||||||
|
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<T, E> ErrDebugLog<T, E> for Result<T, E>
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/core/result/log_debug_err.rs
Normal file
36
src/core/result/log_debug_err.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
use tracing::Level;
|
||||||
|
|
||||||
|
use super::{DebugInspect, Result};
|
||||||
|
use crate::error;
|
||||||
|
|
||||||
|
pub trait LogDebugErr<T, E>
|
||||||
|
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<T, E> LogDebugErr<T, E> for Result<T, E>
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/core/result/log_err.rs
Normal file
36
src/core/result/log_err.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
use tracing::Level;
|
||||||
|
|
||||||
|
use super::Result;
|
||||||
|
use crate::error;
|
||||||
|
|
||||||
|
pub trait LogErr<T, E>
|
||||||
|
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<T, E> LogErr<T, E> for Result<T, E>
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user