#[macro_use]
extern crate enum_methods;
#[test]
fn test_as_getters() {
#[derive(EnumAsGetters, Debug)]
enum MyEnum {
Foo(i64),
Bar(bool),
Baz(String),
}
let foo = MyEnum::Foo(42);
let bar = MyEnum::Bar(false);
let baz = MyEnum::Baz("hurry boy, it's waiting there for you".to_string());
assert_eq!(*foo.as_foo(), 42);
assert_eq!(*bar.as_bar(), false);
assert_eq!(baz.as_baz(), "hurry boy, it's waiting there for you");
}
#[test]
fn test_as_getter_names() {
#[derive(EnumAsGetters, Debug)]
enum MyEnum {
FooBar(bool),
BarBaz(String),
}
let first = MyEnum::FooBar(true);
let second = MyEnum::BarBaz("there's nothing that a hundred men or more could ever do".to_string());
assert_eq!(*first.as_foo_bar(), true);
assert_eq!(second.as_bar_baz(), "there's nothing that a hundred men or more could ever do");
}
#[test]
fn test_getter_structs() {
#[derive(EnumAsGetters, Debug)]
enum MyEnum {
FooBar(bool),
BarBaz(String),
SomeStruct { foo: i32 }, }
impl MyEnum {
pub fn as_some_struct(&self) -> &i32 {
if let &MyEnum::SomeStruct { ref foo } = self {
foo
}
else {
unreachable!()
}
}
}
let first = MyEnum::FooBar(true);
let second = MyEnum::BarBaz("there's nothing that a hundred men or more could ever do".to_string());
let third = MyEnum::SomeStruct { foo: 42 };
assert_eq!(*first.as_foo_bar(), true);
assert_eq!(second.as_bar_baz(), "there's nothing that a hundred men or more could ever do");
assert_eq!(*third.as_some_struct(), 42);
}