justerror

Crates.iojusterror
lib.rsjusterror
version1.1.0
sourcesrc
created_at2022-11-15 11:43:59.084221
updated_at2023-02-13 10:48:01.256455
descriptionExtension to `thiserror` that helps reduce the amount of handwriting
homepage
repositoryhttps://github.com/alexfedoseev/justerror
max_upload_size
id715630
size25,499
Alex (alex35mil)

documentation

https://docs.rs/justerror

README

justerror

github crates.io docs.rs

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: string
  • fmt: 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.

Commit count: 17

cargo fmt