use std::{convert::Infallible, fmt}; use tracing::Level; use super::Error; #[inline] pub fn else_log(error: E) -> Result where T: Default, Error: From, { Ok(default_log(error)) } #[inline] pub fn else_debug_log(error: E) -> Result where T: Default, Error: From, { Ok(default_debug_log(error)) } #[inline] pub fn default_log(error: E) -> T where T: Default, Error: From, { let error = Error::from(error); inspect_log(&error); T::default() } #[inline] pub fn default_debug_log(error: E) -> T where T: Default, Error: From, { let error = Error::from(error); inspect_debug_log(&error); T::default() } #[inline] pub fn map_log(error: E) -> Error where Error: From, { let error = Error::from(error); inspect_log(&error); error } #[inline] pub fn map_debug_log(error: E) -> Error where Error: From, { let error = Error::from(error); inspect_debug_log(&error); error } #[inline] 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_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:?}"), } }