3 releases (stable)
1.1.0 | Feb 13, 2023 |
---|---|
1.0.0 | Dec 7, 2022 |
0.1.0 | Nov 15, 2022 |
#771 in Procedural macros
473 downloads per month
18KB
349 lines
justerror
This macro piggybacks on 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
).
Installation
Add to Cargo.toml
:
justerror = "0.1"
Add to main.rs
:
#[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.
#[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
: stringfmt
:display
|debug
|"<custom format>"
Both can be applied at the root level.
#[Error(desc = "My emum error description", fmt = debug)]
enum EnumError {
Foo(usize),
}
And at the variant level.
#[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.
#[Error(desc = "My emum error description", fmt = debug)]
enum EnumError {
#[error(desc = "Foo error description", fmt = display)]
Foo(#[fmt(">5")] usize),
}
See tests for more examples.
License
MIT.
Dependencies
~1.5MB
~35K SLoC