#error-chain #format-error

display-error-chain

Formats a standard error and its sources

5 releases

0.2.2 Oct 21, 2024
0.2.1 Aug 20, 2024
0.2.0 Aug 24, 2023
0.1.1 Jul 6, 2022
0.1.0 Jan 28, 2021

#752 in Rust patterns

Download history 69880/week @ 2026-01-04 73374/week @ 2026-01-11 74629/week @ 2026-01-18 79322/week @ 2026-01-25 98300/week @ 2026-02-01 102244/week @ 2026-02-08 102275/week @ 2026-02-15 109389/week @ 2026-02-22 131032/week @ 2026-03-01 129755/week @ 2026-03-08 129460/week @ 2026-03-15 130901/week @ 2026-03-22 131742/week @ 2026-03-29 125252/week @ 2026-04-05 134407/week @ 2026-04-12 143159/week @ 2026-04-19

550,937 downloads per month
Used in 33 crates (14 directly)

Apache-2.0/MIT

12KB
142 lines

display-error-chain

A lightweight library for displaying errors and their sources.

A sample output:

macro_rules! impl_error {
    // ...
}

// `TopLevel` is caused by a `MidLevel`.
#[derive(Debug)]
struct TopLevel;
impl_error!(TopLevel, "top level", Some(&MidLevel));

// `MidLevel` is caused by a `LowLevel`.
#[derive(Debug)]
struct MidLevel;
impl_error!(MidLevel, "mid level", Some(&LowLevel));

// `LowLevel` is the cause itself.
#[derive(Debug)]
struct LowLevel;
impl_error!(LowLevel, "low level", None);

// Now let's see how it works:
let formatted = display_error_chain::DisplayErrorChain::new(&TopLevel).to_string();
assert_eq!(
    formatted,
    "\
top level
Caused by:
  -> mid level
  -> low level"
);

// Or with `.chain()` helper:
use display_error_chain::ErrorChainExt as _;
let formatted = TopLevel.chain().to_string();
assert_eq!(
    formatted,
    "\
top level
Caused by:
  -> mid level
  -> low level"
);

// Or even with `.into_chain()` helper to consume the error.
use display_error_chain::ErrorChainExt as _;
let formatted = TopLevel.into_chain().to_string();
assert_eq!(
    formatted,
    "\
top level
Caused by:
  -> mid level
  -> low level"
);

License: Apache-2.0/MIT

No runtime deps