use super::Error;
mod private {
pub trait Sealed {}
}
use self::private::Sealed;
pub trait Context: Sealed {
#[must_use]
fn field(self, component: &str) -> Self
where
Self: Sized,
{
self.with_field(|| component)
}
#[must_use]
fn with_field<'a>(self, f: impl FnOnce() -> &'a str) -> Self
where
Self: Sized;
}
impl<T> Sealed for Result<T, Error> {}
impl<T> Context for Result<T, Error> {
fn with_field<'a>(self, f: impl FnOnce() -> &'a str) -> Self
where
Self: Sized,
{
self.map_err(|mut e| {
e.field.push_front(f());
e
})
}
}