bootc_internal_utils/
result_ext.rs

1/// Extension trait for Result types that provides logging capabilities
2pub trait ResultExt<T, E: std::fmt::Display> {
3    /// Return the Ok value unchanged.  In the err case, log it, and call the closure to compute the default
4    fn log_err_or_else<F>(self, default: F) -> T
5    where
6        F: FnOnce() -> T;
7    /// Return the Ok value unchanged.  In the err case, log it, and return the default value
8    fn log_err_default(self) -> T
9    where
10        T: Default;
11}
12
13impl<T, E: std::fmt::Display> ResultExt<T, E> for Result<T, E> {
14    #[track_caller]
15    fn log_err_or_else<F>(self, default: F) -> T
16    where
17        F: FnOnce() -> T,
18    {
19        match self {
20            Ok(r) => r,
21            Err(e) => {
22                tracing::debug!("{e}");
23                default()
24            }
25        }
26    }
27
28    #[track_caller]
29    fn log_err_default(self) -> T
30    where
31        T: Default,
32    {
33        self.log_err_or_else(|| Default::default())
34    }
35}