2 unstable releases

Uses old Rust 2015

0.1.0 Aug 18, 2025
0.0.0 May 1, 2019

#551 in Rust patterns

Download history 2/week @ 2025-10-12 3/week @ 2025-10-19 2/week @ 2025-10-26 53/week @ 2025-11-30 221/week @ 2025-12-07 288/week @ 2025-12-14 106/week @ 2025-12-21 454/week @ 2025-12-28 971/week @ 2026-01-04 1240/week @ 2026-01-11 834/week @ 2026-01-18 509/week @ 2026-01-25

3,680 downloads per month

MIT license

29KB
422 lines

errors

std::error::Error extensions

crates.io Documentation

This crate encourages usage of the std::error::Error trait for describing errors, providing the following utilities:

  • Error creation: The errors::new, errors::wrap, and errors::opaque functions ease the creation of simple error values.
  • Error inspection: Error source chains can be easily iterated with errors::iter iterators to find the error you're looking for.
  • Error formatting: The error values created with this crate provide simple yet powerful control over the formatting of errors and their source chains, and the errors::fmt adapter allows foreign error values to follow along.

Configuring Error Formatting

An Error likely has a message, it might have a cause, and someday, it may have a backtrace. How can a user decide how they should be formatted?

Output options:

  • Top message only

    ship exploded
    
  • Top message + message of source chain

    ship exploded: cat hair in generator
    
  • Top message + message of source chain + trace/frame

    ship exploded
        at main.rs:55
        at ship.rs:89
    Caused by: cat hair in generator
        at ship::parts::generator.rs:33
        at ship::parts::engine.rs:789
        at ship.rs:89
        at main.rs:55
    

Format flags

  • Default ({}): Print only the top-level message. This is inline with the recommendation for Error
    • Example: println!("top only = {}", err) outputs top only = ship exploded.
    • Alternative: This could also be achieved and possibly clearer by setting the "precision" flag to 0, such as println!("top only: {:.0}", err).
  • Message chain ({:+}): Prints the message, and the message of each source, joined by ": ".
    • Example: println!("chain = {:+}", err) outputs chain = ship exploded: cat hair in generator.
  • With trace/frame ({:#}): Prints the message and stack trace/frame
    • Example: println!("top trace = {:#}", err) outputs top trace = ship exploded\n at ship.rs:89.
  • Message chain with trace/frame ({:+#}): Prints the message and stack trace/frame, and message and trace for each source, joined by \nCaused by:.
  • Message chain maximum ({:+.2}): Sets the maximum messages that should be printed down the source chain.

No runtime deps