Derive Macro gazebo::variants::UnpackVariants
source · [−]#[derive(UnpackVariants)]
Expand description
Generates implementation to unpack the inner data of enum variants. The unpack_XXX
methods
return the unpacked data as a tuple of references of the inner data. The into_XXX
variants
return similarly-structured tuples.
use gazebo::variants::UnpackVariants;
#[derive(UnpackVariants)]
enum MyEnum {
Unit,
Unnamed(String, usize),
Named { x: String, y: usize },
OneWithCapInName(bool),
}
let x = MyEnum::Unit;
assert_eq!(x.unpack_unit(), Some(()));
assert_eq!(x.unpack_unnamed(), None);
assert_eq!(x.unpack_named(), None);
assert_eq!(x.unpack_one_with_cap_in_name(), None);
let x = MyEnum::Unnamed("foo".into(), 1);
assert_eq!(x.unpack_unnamed(), Some((&"foo".to_owned(), &1usize)));
assert_eq!(x.unpack_unit(), None);
assert_eq!(x.unpack_named(), None);
assert_eq!(x.unpack_one_with_cap_in_name(), None);
let x = MyEnum::Named {
x: "foo".into(),
y: 2,
};
assert_eq!(x.unpack_unit(), None);
assert_eq!(x.unpack_unnamed(), None);
assert_eq!(x.unpack_named(), Some((&"foo".to_owned(), &2usize)));
assert_eq!(x.unpack_one_with_cap_in_name(), None);
let x = MyEnum::OneWithCapInName(true);
assert_eq!(x.unpack_one_with_cap_in_name(), Some(&true));
assert_eq!(x.unpack_unit(), None);
assert_eq!(x.unpack_unnamed(), None);
assert_eq!(x.unpack_named(), None);
let x = MyEnum::Unnamed("foo".into(), 1);
assert_eq!(x.into_unnamed(), Some(("foo".to_owned(), 1usize)));
let x = MyEnum::Unit;
assert_eq!(x.into_unit(), Some(()));
let x = MyEnum::Named {
x: "foo".into(),
y: 2,
};
assert_eq!(x.into_named(), Some(("foo".into(), 2usize)));
let x = MyEnum::OneWithCapInName(true);
assert_eq!(x.into_one_with_cap_in_name(), Some(true));
assert_eq!(MyEnum::Unit.into_unnamed(), None);
assert_eq!(MyEnum::Unit.into_named(), None);
assert_eq!(MyEnum::Unit.into_one_with_cap_in_name(), None);