Trait eyre::ContextCompat
source · pub trait ContextCompat<T>: Sealed {
fn context<D>(self, msg: D) -> Result<T, Report>
where
D: Display + Send + Sync + 'static;
fn with_context<D, F>(self, f: F) -> Result<T, Report>
where
D: Display + Send + Sync + 'static,
F: FnOnce() -> D;
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
where
D: Display + Send + Sync + 'static;
fn wrap_err_with<D, F>(self, f: F) -> Result<T, Report>
where
D: Display + Send + Sync + 'static,
F: FnOnce() -> D;
}Expand description
Provides the context method for Option when porting from anyhow
This trait is sealed and cannot be implemented for types outside of
eyre.
Why Doesn’t Eyre impl WrapErr for Option?
eyre doesn’t impl WrapErr for Option because wrap_err implies that you’re creating a
new error that saves the previous error as its source. Calling wrap_err on an Option is
meaningless because there is no source error. anyhow avoids this issue by using a different
mental model where you’re adding “context” to an error, though this not a mental model for
error handling that eyre agrees with.
Instead, eyre encourages users to think of each error as distinct, where the previous error
is the context being saved by the new error, which is backwards compared to anyhow’s model. In
this model you’re encouraged to use combinators provided by std for Option to convert an
option to a Result
Example
Instead of:
use eyre::ContextCompat;
fn get_thing(mut things: impl Iterator<Item = u32>) -> eyre::Result<u32> {
things
.find(|&thing| thing == 42)
.context("the thing wasnt in the list")
}We encourage you to use this:
use eyre::eyre;
fn get_thing(mut things: impl Iterator<Item = u32>) -> eyre::Result<u32> {
things
.find(|&thing| thing == 42)
.ok_or_else(|| eyre!("the thing wasnt in the list"))
}Required Methods§
sourcefn context<D>(self, msg: D) -> Result<T, Report>where
D: Display + Send + Sync + 'static,
fn context<D>(self, msg: D) -> Result<T, Report>where
D: Display + Send + Sync + 'static,
Compatibility version of wrap_err for creating new errors with new source on Option
when porting from anyhow
sourcefn with_context<D, F>(self, f: F) -> Result<T, Report>where
D: Display + Send + Sync + 'static,
F: FnOnce() -> D,
fn with_context<D, F>(self, f: F) -> Result<T, Report>where
D: Display + Send + Sync + 'static,
F: FnOnce() -> D,
Compatibility version of wrap_err_with for creating new errors with new source on Option
when porting from anyhow