use my_library::parametrized;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
#[parametrized(iter, into_iter, iter_mut, map)]
enum ComplexEnum<K, V> {
TreeMap(BTreeMap<K, V>),
Array([V; 5]),
Sets(Vec<HashSet<V>>),
Optional(Option<BTreeSet<V>>),
}
fn main() {
let mut tree_map_enum = ComplexEnum::TreeMap(BTreeMap::from([
("first", 10),
("second", 20),
("third", 30),
]));
if let ComplexEnum::TreeMap(ref map) = tree_map_enum {
for (key, value) in map.iter() {
println!("Key: {}, Value: {}", key, value);
}
}
if let ComplexEnum::TreeMap(ref mut map) = tree_map_enum {
for (_, value) in map.iter_mut() {
*value *= 2; }
}
if let ComplexEnum::TreeMap(ref map) = tree_map_enum {
for (key, value) in map.iter() {
println!("Updated Key: {}, Value: {}", key, value);
}
}
if let ComplexEnum::TreeMap(map) = tree_map_enum {
let sum: i32 = map.into_iter().map(|(_, v)| v).sum();
println!("Sum of all values in TreeMap: {}", sum);
}
let set_enum = ComplexEnum::Sets(vec![HashSet::from([1, 2, 3]), HashSet::from([4, 5, 6])]);
if let ComplexEnum::Sets(ref sets) = set_enum {
for set in sets.iter() {
println!("Set Values: {:?}", set);
}
}
let optional_enum = ComplexEnum::Optional(Some(BTreeSet::from([1, 2, 3])));
if let ComplexEnum::Optional(Some(set)) =
optional_enum.map(|set| set.into_iter().map(|x| x + 10).collect())
{
println!("Updated Optional Set: {:?}", set);
}
}