Crates.io | enum-filter |
lib.rs | enum-filter |
version | 0.1.0 |
source | src |
created_at | 2023-07-26 18:55:27.912958 |
updated_at | 2023-07-26 18:55:27.912958 |
description | Filter to a specific enum variant from an iterator |
homepage | |
repository | https://github.com/PaulOlteanu/enum-filter |
max_upload_size | |
id | 926767 |
size | 15,250 |
enum_filter
provides a macro that will generate "filter" methods for iterators over an enum
It does so by creating a trait EnumNameFilter
with the same visibilty as the enum
For variants with named fields it will create a struct VariantNameData
, also with the same visibility as the enum
#[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]
);
}