Trait IntoEyreReport

Source
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§

Source

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.

Implementors§