1个不稳定版本
0.1.0 | 2023年7月26日 |
---|
#1646 在 过程宏
每月 39 次下载
12KB
226 行
enum_filter
enum_filter
提供了一个宏,该宏将为枚举迭代器生成 "filter" 方法
它通过创建一个与枚举具有相同可见性的 trait EnumNameFilter
来实现
对于具有命名字段的变体,它将创建一个与枚举具有相同可见性的 struct VariantNameData
#[enum_filter]
enum Example {
Variant1,
Variant2(u8),
Variant3 { data: u8 },
}
fn main() {
let mut test_vec = vec![
Example::Variant1,
Example::Variant2(2),
Example::Variant3 { data: 3 },
];
assert_eq!(
test_vec.iter().filter_variant1().collect::<Vec<_>>(),
vec![()]
);
assert_eq!(
test_vec.iter_mut().filter_variant2().collect::<Vec<_>>(),
vec![&mut 2]
);
assert_eq!(
test_vec
.into_iter()
.filter_variant3()
.map(|v| v.data)
.collect::<Vec<_>>(),
vec![3]
);
}
lib.rs
:
enum_filter
提供了一个宏,该宏将为枚举迭代器生成 "filter" 方法。它通过创建一个与枚举具有相同可见性的 trait EnumNameFilter
来实现,对于具有命名字段的变体,它将创建一个与枚举具有相同可见性的 struct VariantNameData
#[enum_filter]
enum Example {
Variant1,
Variant2(u8),
Variant3 { data: u8 },
}
fn main() {
let mut test_vec = vec![
Example::Variant1,
Example::Variant2(2),
Example::Variant3 { data: 3 },
];
assert_eq!(
test_vec.iter().filter_variant1().collect::<Vec<_>>(),
vec![()]
);
assert_eq!(
test_vec.iter_mut().filter_variant2().collect::<Vec<_>>(),
vec![&mut 2]
);
assert_eq!(
test_vec
.into_iter()
.filter_variant3()
.map(|v| v.data)
.collect::<Vec<_>>(),
vec![3]
);
}
依赖项
~0.9–1.4MB
~27K SLoC