use my_library::parametrized;
#[parametrized(iter, into_iter, iter_mut, map)]
enum MyEnum<K, V> {
Pair(K, Vec<V>),
Map(Vec<(K, V)>),
Metadata {
description: String,
values: Vec<Option<V>>,
},
}
fn main() {
let mut pair_enum = MyEnum::Pair("key1", vec![1, 2, 3, 4]);
if let MyEnum::Pair(_, ref values) = pair_enum {
for val in values.iter() {
println!("Value in Pair: {}", val);
}
}
if let MyEnum::Pair(_, ref mut values) = pair_enum {
for val in values.iter_mut() {
*val *= 2;
}
}
if let MyEnum::Pair(_, ref values) = pair_enum {
for val in values.iter() {
println!("Updated Value in Pair: {}", val);
}
}
if let MyEnum::Pair(_, values) = pair_enum {
let sum: i32 = values.into_iter().sum();
println!("Sum of values in Pair: {}", sum);
}
let metadata_enum = MyEnum::Metadata {
description: "Example Metadata".to_string(),
values: vec![Some(5), None, Some(10)],
};
if let MyEnum::Metadata {
description,
values,
} = metadata_enum.map(|v| v.map(|x| x + 1))
{
println!("Description: {}", description);
for val in values.iter() {
println!("Updated Metadata Value: {:?}", val);
}
}
}