Skip to content

imbolc/source-chain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Formats StdError with it's source chain

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages