derive_is_enum_variant

Crates.ioderive_is_enum_variant
lib.rsderive_is_enum_variant
version0.1.1
sourcesrc
created_at2017-09-14 21:32:01.781726
updated_at2017-09-14 21:47:56.187474
descriptionAutomatically derives `is_dog` and `is_cat` methods for `enum Pet { Dog, Cat }`.
homepage
repositoryhttps://github.com/fitzgen/derive_is_enum_variant
max_upload_size
id31805
size29,211
Nick Fitzgerald (fitzgen)

documentation

https://docs.rs/derive_is_enum_variant

README

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

Commit count: 4

cargo fmt