A crate that adds a derive macro that simplifies many common operations when building custom `Error` types. Basic usage is as follows ```rust use thiserror::Error as ThisError; [derive(ThisError, Debug)] enum Error { #[error("There was an IO error: {0}")] A(#[from] io::Error) } ``` The `#[error(...)]` attribute is used for `Display`. `#[from]` is used to automatically generate `From<T>` implementations. Works especially well for `enum`- based errors. Additionally will automatically become the value returned by `std::error::Error::source`.