License Crates.io Docs.rs

source-chain

Formats StdError with it's source chain

```rust

[derive(Debug, thiserror::Error)]

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

fn fileerror() -> Result { let filename = "unknown-file.txt"; std::fs::readtostring(filename).maperr(|e| Error::UnknownFile(e, filename)) }

let err = fileerror().unwraperr(); asserteq!( sourcechain::to_string(&err), "unknown file unknown-file.txt\nCaused by:\n\tNo such file or directory (os error 2)" );

let dynerr: Box = Box::new(err); asserteq!( // notice dereferencing sourcechain::tostring(&*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: bash cargo sync-readme (make sure the cargo command is installed): bash 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.