13 releases
0.6.1 | Sep 9, 2024 |
---|---|
0.6.0 | May 30, 2023 |
0.5.2 |
|
0.5.1 | Aug 6, 2022 |
0.2.1 | Dec 9, 2018 |
#29 in Procedural macros
2,655,440 downloads per month
Used in 1,639 crates
(95 directly)
17KB
265 lines
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:
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:
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
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:
use enum_as_inner::EnumAsInner;
#[derive(Debug, EnumAsInner)]
enum ManyVariants {
One(u32),
Two(u32, i32),
Three(bool, u32, i64),
}
And can be accessed like:
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:
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:
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));
Dependencies
~250–700KB
~16K SLoC