12个版本
0.6.0 | 2023年5月30日 |
---|---|
0.5.1 | 2022年8月6日 |
0.5.0 | 2022年5月23日 |
0.4.0 | 2022年2月26日 |
0.2.1 | 2018年12月9日 |
在 过程宏 中排名 35
每月下载量 1,594,989
在 1,488 个crate(直接使用84个) 中使用
17KB
265 行
enum-as-inner
一个用于生成自动访问枚举内部成员的函数的deriving过程宏。
基本未命名字段案例
基本案例适用于单个元素的枚举,例如
use enum_as_inner::EnumAsInner;
#[derive(Debug, EnumAsInner)]
enum OneEnum {
One(u32),
}
其中内部项可以通过 as_*()
或 as_*_mut()
函数检索,或者通过 into_*()
函数
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);
结果要么是内部项的引用,要么是包含内部项的元组。
单元案例
如果枚举的变体与预期类型匹配,则返回true
use enum_as_inner::EnumAsInner;
#[derive(EnumAsInner)]
enum UnitVariants {
Zero,
One,
Two,
}
let unit = UnitVariants::Two;
assert!(unit.is_two());
多个,未命名字段案例
这将返回一个内部类型的元组
use enum_as_inner::EnumAsInner;
#[derive(Debug, EnumAsInner)]
enum ManyVariants {
One(u32),
Two(u32, i32),
Three(bool, u32, i64),
}
并且可以像这样访问
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));
多个,命名字段案例
这将返回与未命名选项相同的内部类型的元组
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 },
}
并且可以像这样访问
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));
依赖项
~300–750KB
~18K SLoC