pretty-error-debug

GitHub Workflow Status Crates.io Minimum supported Rust version: 1.56 License: MIT OR Apache-2.0

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.

Example message

```text Error: Got a 'middle' error

Caused by: 1: A nested error occured 2: 'inner' failed 3: Caught an error: Not implemented, yet. ```

With thiserror

```rust

[derive(prettyerrordebug::Debug, thiserror::Error)]

pub enum MyError { #[error("Error variant 1 happened")] Variant1(#[from] Error1), #[error("Error variant 2 happened")] Variant2(#[from] Error2), }

fn main() -> Result<(), MyError> { ... } ```

With thiserror, but without a new type

```rust

[derive(Debug, thiserror::Error)]

pub enum MyError { #[error("Error variant 1 happened")] Variant1(#[from] Error1), #[error("Error variant 2 happened")] Variant2(#[from] Error2), }

fn main() -> Result<(), prettyerrordebug::Wrapper> { ... } ```

Without thiserror

```rust use std::error::Error; use std::fmt::{self, Write};

[derive(prettyerrordebug::Debug)]

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> { ... } ```