#source #chain #format #error #std-error

source-chain

Formats StdError with it's source chain

1 unstable release

0.1.0 Jun 20, 2023

#2046 in Rust patterns

Download history 29/week @ 2024-07-22 37/week @ 2024-07-29 7/week @ 2024-08-05 5/week @ 2024-08-12 9/week @ 2024-08-19 16/week @ 2024-08-26 16/week @ 2024-09-09 55/week @ 2024-09-16 26/week @ 2024-09-23 38/week @ 2024-09-30 25/week @ 2024-10-07 11/week @ 2024-10-21 43/week @ 2024-10-28 1/week @ 2024-11-04

58 downloads per month
Used in pg_task

MIT license

5KB

License Crates.io Docs.rs

source-chain

Formats StdError with it's source chain

#[derive(Debug, thiserror::Error)]
enum Error {
    #[error("unknown file {1}")]
    UnknownFile(#[source] std::io::Error, &'static str),
}

fn file_error() -> Result<String, Error> {
    let filename = "unknown-file.txt";
    std::fs::read_to_string(filename).map_err(|e| Error::UnknownFile(e, filename))
}

let err = file_error().unwrap_err();
assert_eq!(
    source_chain::to_string(&err),
    "unknown file unknown-file.txt\nCaused by:\n\tNo such file or directory (os error 2)"
);

let dyn_err: Box<dyn std::error::Error> = Box::new(err);
assert_eq!(
    // notice dereferencing
    source_chain::to_string(&*dyn_err),
    "unknown file unknown-file.txt\nCaused by:\n\tNo such file or directory (os error 2)"
);

Contributing

We appreciate all kinds of contributions, thank you!

Note on README

Most of the readme is automatically copied from the crate documentation by cargo-sync-readme. This way the readme is always in sync with the docs and examples are tested.

So if you find a part of the readme you'd like to change between <!-- cargo-sync-readme start --> and <!-- cargo-sync-readme end --> markers, don't edit README.md directly, but rather change the documentation on top of src/lib.rs and then synchronize the readme with:

cargo sync-readme

(make sure the cargo command is installed):

cargo install cargo-sync-readme

If you have rusty-hook installed the changes will apply automatically on commit.

License

This project is licensed under the MIT license.

No runtime deps