# justerror
[](https://github.com/shakacode/justerror)
[](https://crates.io/crates/justerror)
[](https://docs.rs/justerror)
This macro piggybacks on [`thiserror`](https://github.com/dtolnay/thiserror) crate and is supposed to reduce the amount of handwriting when you want errors in your app to be described via explicit types (rather than [`anyhow`](https://github.com/dtolnay/anyhow)).
## Installation
Add to `Cargo.toml`:
```toml
justerror = "0.1"
```
Add to `main.rs`:
```rust
#[macro_use]
extern crate justerror;
```
## Usage
This macro takes a subject struct or enum and applies `thiserror` attributes with predefined `#[error]` messages.
Generally, you can attach `#[Error]` macro to an error type and be done with it.
```rust
#[Error]
enum EnumError {
Foo,
Bar {
a: &'static str,
b: usize
},
}
eprintln!("{}", EnumError::Bar { a: "Hey!", b: 42 });
// EnumError::Bar
// === ↴
// a: Hey!
// b: 42
```
Macro accepts two optional arguments:
- `desc`: string
- `fmt`: `display` | `debug` | `""`
Both can be applied at the root level.
```rust
#[Error(desc = "My emum error description", fmt = debug)]
enum EnumError {
Foo(usize),
}
```
And at the variant level.
```rust
#[Error(desc = "My emum error description", fmt = debug)]
enum EnumError {
#[error(desc = "Foo error description", fmt = display)]
Foo(usize),
}
```
`fmt` can also be applied to individual fields.
```rust
#[Error(desc = "My emum error description", fmt = debug)]
enum EnumError {
#[error(desc = "Foo error description", fmt = display)]
Foo(#[fmt(">5")] usize),
}
```
See [tests](tests/tests.rs) for more examples.
## License
MIT.