Enum getter/is_* method generation.
I will attempt to prevent seriously breaking changes after we hit 0.1.0.
In your Cargo.toml, add this line under your [dependencies] section:
toml,no_run
enum-methods = "0.0.8"
To use, simply derive and call methods (see the example below).
Usually when you write an enum with one or zero values, you might want to add a set of getters for them. As such:
```rust
enum MyEnum { FooBarBaz(i64), BazBarFoo(String), // ... and others }
impl MyEnum { pub fn foobarbaz(&self) -> i64 { if let &MyEnum::FooBarBaz(i) = self { i } else { panic!("called MyEnum::FooBarBaz() on {:?}", self) } } // et cetera }
```
But this gets tedious, and adds a lot code for this simple functionality.
Enter enum-methods.
Instead of doing the above with the if let ... else { panic!(...) }, you
simply derive from the EnumIntoGetters
```rust
extern crate enum_methods;
enum MyEnum { FooBarBaz(i64), BazBarFoo(String), // ... and others }
fn main() { let myfoo = MyEnum::FooBarBaz(42); // EnumIsA - creates is* methods for every member if myfoo.isfoobarbaz() { // EnumAsGetters - gets a reference to the enum, panicking if it is // not the specified variant asserteq!(*myfoo.asfoobarbaz(), 42); // EnumIntoGetters - consumes the enum, yielding its owned value, // and panicking if it is not the specified variant asserteq!(myfoo.intofoobarbaz(), 42); } } ```
Right now, enum-methods has four derivable options:
EnumAsGetters for generating as_* methods, which return a reference.EnumIntoGetters for generating into_* methods, which consume the enum
and returns the data held by the variant.EnumToGetters for generating to_* methods, which returns a clone of
the data held by the variant.EnumIsA for generating is_* methods, which return a boolean indicating
whether the enum matches that variant.EnumAsGetters, EnumIntoGetters, and EnumToGetters have some limitations.
EnumIntoGetters must also derive from Debug - this
is for when a method is called for the wrong variant and needs to panic!.Furthermore, EnumToGetters is only for enums whose variants implement
Clone. There is not yet support for th
EnumIsA is much simpler than the previous; it simply adds is_*
methods returning a boolean for whether the variant matches or not.
For all generated methods, all names are automatically converted to snake_case.
This software is released under the Apache license 2.0. See the LICENSE file for more details.