pub trait IntoEyreReport {
// Required method
fn into_eyre_report(self) -> Report;
}
Expand description
Adds the into_eyre_report
method
on various error and error builder types.
Do not implement this trait. Importing the trait is sufficient.
due to blanket implementations. The trait is implemented on
StashWithErrors
and on
E
if E
implements core::error::Error + Send + Sync + 'a
.
Required Methods§
Sourcefn into_eyre_report(self) -> Report
fn into_eyre_report(self) -> Report
Lossy conversion to return some type, for example
a non-empty list of one or more errors,
from functions returning eyre::Result
,
i.e. Result<_, E>
where E
is eyre::Report
.
use eyre::{bail, eyre};
use lazy_errors::prelude::*;
fn adhoc_error() -> eyre::Result<()> {
let err = Error::from_message("first() failed");
bail!(err.into_eyre_report());
}
let err: eyre::Report = adhoc_error().unwrap_err();
let printed = format!("{err}"); // No pretty-printing required
let printed = replace_line_numbers(&printed);
assert_eq!(printed, indoc::indoc! {"
first() failed
at src/into_eyre.rs:1234:56"});
fn wrapped_report() -> eyre::Result<()> {
let report = eyre!("This is an eyre::Report");
let err: Error = Error::wrap(report);
bail!(err.into_eyre_report());
}
let err: eyre::Report = wrapped_report().unwrap_err();
let printed = format!("{err}"); // No pretty-printing required
let printed = replace_line_numbers(&printed);
assert_eq!(printed, indoc::indoc! {"
This is an eyre::Report
at src/into_eyre.rs:1234:56"});
fn stashed_errors() -> eyre::Result<()> {
let mut stash = ErrorStash::new(|| "One or more things failed");
adhoc_error().or_stash(&mut stash);
wrapped_report().or_stash(&mut stash);
stash.into_eyre_result()
}
let err: eyre::Report = stashed_errors().unwrap_err();
let printed = format!("{err}"); // No pretty-printing required
let printed = replace_line_numbers(&printed);
assert_eq!(printed, indoc::indoc! {"
One or more things failed
- first() failed
at src/into_eyre.rs:1234:56
at src/into_eyre.rs:1234:56
- This is an eyre::Report
at src/into_eyre.rs:1234:56
at src/into_eyre.rs:1234:56"});
Note: This method discards information because it
flattens the type into a single string
that is then passed to eyre::eyre!
.
In some cases, for example if you’re using or_stash
,
you may want to use IntoEyreResult
instead.