enum_is
Procedural macro that generates is_* predicate methods for enum variants.
With #[derive(EnumIs)], every variant of your enum gets an is_<variant>()
method (in snake_case) that returns true when self matches that variant.
Works with unit, tuple, and struct variants.
You can also ignore specific variants with #[enum_is(ignore)] or rename a method with #[enum_is(rename = "...")].
Example
use EnumIs;
Generated methods look like:
Ignoring variants
Use #[enum_is(ignore)] on any variant you don’t want a predicate for:
use EnumIs;
// v.is_not_number() is NOT generated
Renaming methods
Use #[enum_is(rename = "...")] on a variant to override its method name:
use EnumIs;
let o = DriveOrStop;
assert!;
Installation
In your Cargo.toml:
[]
= "0.1"
Then:
use EnumIs;
Supported enums
EnumIs works with:
-
Unit variants
let s = Ok; assert!; assert!; -
Tuple variants
let v = Pair; assert!; assert!; -
Struct variants
let m = Data ; assert!; assert!;
Naming rules
For each variant, EnumIs generates a method:
-
Method name:
is_<variant_name_in_snake_case> -
Example mappings:
Variant name Method name Fastis_fast()PostOnlyis_post_only()CPUis_cpu()HTTPRequestErroris_http_request_error()
The methods take &self and return bool.
Internally, the macro uses matches! with:
Self::Variantfor unit variantsSelf::Variant(..)for tuple variantsSelf::Variant { .. }for struct variants
Limitations
#[derive(EnumIs)]must be used on enums only.