# enum-as-inner A deriving proc-macro for generating functions to automatically give access to the inner members of enum. ## Basic unnamed field case The basic case is meant for single item enums, like: ```rust use enum_as_inner::EnumAsInner; #[derive(Debug, EnumAsInner)] enum OneEnum { One(u32), } ``` where the inner item can be retrieved with the `as_*()`/`as_*_mut()` or with the `into_*()` functions: ```rust let one = OneEnum::One(1); assert_eq!(*one.as_one().unwrap(), 1); assert_eq!(one.into_one().unwrap(), 1); let mut one = OneEnum::One(2); assert_eq!(*one.as_one().unwrap(), 1); assert_eq!(*one.as_one_mut().unwrap(), 1); assert_eq!(one.into_one().unwrap(), 1); ``` where the result is either a reference for inner items or a tuple containing the inner items. ## Unit case This will return true if enum's variant matches the expected type ```rust use enum_as_inner::EnumAsInner; #[derive(EnumAsInner)] enum UnitVariants { Zero, One, Two, } let unit = UnitVariants::Two; assert!(unit.is_two()); ``` ## Mutliple, unnamed field case This will return a tuple of the inner types: ```rust use enum_as_inner::EnumAsInner; #[derive(Debug, EnumAsInner)] enum ManyVariants { One(u32), Two(u32, i32), Three(bool, u32, i64), } ``` And can be accessed like: ```rust let mut many = ManyVariants::Three(true, 1, 2); assert_eq!(many.as_three().unwrap(), (&true, &1_u32, &2_i64)); assert_eq!(many.as_three_mut().unwrap(), (&mut true, &mut 1_u32, &mut 2_i64)); assert_eq!(many.into_three().unwrap(), (true, 1_u32, 2_i64)); ``` ## Multiple, named field case This will return a tuple of the inner types, like the unnamed option: ```rust use enum_as_inner::EnumAsInner; #[derive(Debug, EnumAsInner)] enum ManyVariants { One{ one: u32 }, Two{ one: u32, two: i32 }, Three{ one: bool, two: u32, three: i64 }, } ``` And can be accessed like: ```rust let mut many = ManyVariants::Three{ one: true, two: 1, three: 2 }; assert_eq!(many.as_three().unwrap(), (&true, &1_u32, &2_i64)); assert_eq!(many.as_three_mut().unwrap(), (&mut true, &mut 1_u32, &mut 2_i64)); assert_eq!(many.into_three().unwrap(), (true, 1_u32, 2_i64)); ```