macro_rules! variant {
($pattern:pat = $input:expr => $output:expr) => { ... };
}Expand description
Maps an enum to an option for use with Iterator::filter_map
§Syntax
ⓘ
variant!( pattern = input => output )§Example
use kai::*;
enum Foo {
Bar(bool),
Baz(i32),
}
let bar = Foo::Bar(true);
let baz = Foo::Baz(5);
assert_eq!(None, variant!(Foo::Baz(i) = bar => i));
assert_eq!(Some(5), variant!(Foo::Baz(i) = baz => i));
let foos = vec![
Foo::Baz(5),
Foo::Bar(false),
Foo::Baz(2),
];
// Turns this
let ints: Vec<i32> = foos
.iter()
.filter_map(|foo| if let Foo::Baz(i) = foo {
Some(i)
} else {
None
})
.cloned()
.collect();
// Into this
let ints: Vec<i32> = foos
.iter()
.filter_map(|foo| variant!(Foo::Baz(i) = foo => i))
.cloned()
.collect();
assert_eq!(vec![5, 2], ints);