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`.