#enums #derive #variant #is

macro derive_is_enum_variant

Automatically derives is_dog and is_cat methods for enum Pet { Dog, Cat }

2 releases

Uses old Rust 2015

0.1.1 Sep 14, 2017
0.1.0 Sep 14, 2017

#2314 in Rust patterns

Download history 2090/week @ 2023-12-18 1223/week @ 2023-12-25 1526/week @ 2024-01-01 2398/week @ 2024-01-08 2441/week @ 2024-01-15 2128/week @ 2024-01-22 2796/week @ 2024-01-29 2588/week @ 2024-02-05 3064/week @ 2024-02-12 3127/week @ 2024-02-19 2723/week @ 2024-02-26 2642/week @ 2024-03-04 2936/week @ 2024-03-11 2417/week @ 2024-03-18 2815/week @ 2024-03-25 2707/week @ 2024-04-01

11,062 downloads per month
Used in 27 crates (8 directly)

Apache-2.0/MIT

12KB
135 lines

derive_is_enum_variant

derive_is_enum_variant

Build Status

Stop writing pub is_whatever(&self) -> bool for your enums by hand -- it's a pain! Just #[derive(is_enum_variant)] instead!

Usage

Add derive_is_enum_variant to your crate's Cargo.toml:

[dependencies]
derive_is_enum_variant = "<insert-latest-version-here>"

And then add #[derive(is_enum_variant)] to your enum definitions:

#[macro_use]
extern crate derive_is_enum_variant;

#[derive(is_enum_variant)]
pub enum Pet {
    Doggo,
    Kitteh,
}

fn main() {
    let pet = Pet::Doggo;

    assert!(pet.is_doggo());
    assert!(!pet.is_kitteh());
}

Customizing Predicate Names

By default, the predicates are named is_snake_case_of_variant_name. You can use any name you want instead with #[is_enum_variant(name = "..")]:


#[derive(is_enum_variant)]
pub enum Pet {
    #[is_enum_variant(name = "is_real_good_boy")]
    Doggo,
    Kitteh,
}

let pet = Pet::Doggo;
assert!(pet.is_real_good_boy());

Skipping Predicates for Certain Variants

If you don't want to generate a predicate for a certain variant, you can use #[is_enum_variant(skip)]:


#[derive(is_enum_variant)]
pub enum Errors {
    Io(::std::io::Error),

    #[doc(hidden)]
    #[is_enum_variant(skip)]
    __NonExhaustive,
}

License

Licensed under either of

at your option.

Contribution

See CONTRIBUTING.md for hacking!

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

License: Apache-2.0/MIT

Dependencies

~2MB
~48K SLoC