Display a the chain of an error. Most useful as Result<(), E>
for your fn main()
,
and in conjunction with thiserror
.
This crate simply plagiarized extracted all the relevant formatting code from
anyhow
.
```text Error: Got a 'middle' error
Caused by: 1: A nested error occured 2: 'inner' failed 3: Caught an error: Not implemented, yet. ```
thiserror
```rust
pub enum MyError { #[error("Error variant 1 happened")] Variant1(#[from] Error1), #[error("Error variant 2 happened")] Variant2(#[from] Error2), }
fn main() -> Result<(), MyError> { ... } ```
thiserror
, but without a new type```rust
pub enum MyError { #[error("Error variant 1 happened")] Variant1(#[from] Error1), #[error("Error variant 2 happened")] Variant2(#[from] Error2), }
fn main() -> Result<(), prettyerrordebug::Wrapper
thiserror
```rust use std::error::Error; use std::fmt::{self, Write};
pub enum MyError { Variant1(Error1), Variant2(Error2), }
impl fmt::Display for MyError { fn fmt(&self, f: &mut fmt::Formatter<'>) -> fmt::Result { match self { MyError::Variant1() => write!(f, "Error variant 1 happened"), MyError::Variant2(_) => write!(f, "Error variant 2 happened"), } } }
impl Error for MyError { fn source(&self) -> Option<&(dyn Error + 'static)> { match self { MyError::Variant1(source) => Some(source), MyError::Variant2(source) => Some(source), } } }
fn main() -> Result<(), MyError> { ... } ```