use parametrized::*;
use std::collections::{BTreeSet, HashMap, HashSet};
#[parametrized(default = [0, 1], into_iter = [0, 1], iter_mut = [0], map = [0, 1])]
struct ComplexStruct<K, V> {
data: HashMap<K, HashSet<V>>,
sorted_values: Vec<BTreeSet<V>>,
metadata: [String; 3],
}
fn main() {
let mut complex_struct = ComplexStruct {
data: {
let mut map = HashMap::new();
map.insert("category1", HashSet::from([1, 2, 3]));
map.insert("category2", HashSet::from([4, 5, 6]));
map
},
sorted_values: vec![BTreeSet::from([10, 20, 30]), BTreeSet::from([40, 50, 60])],
metadata: [
"meta1".to_string(),
"meta2".to_string(),
"meta3".to_string(),
],
};
for (key, set) in complex_struct.iter() {
println!("Key: {}, Values: {:?}", key, set);
}
for (_, set) in complex_struct.iter_mut() {
set.insert(100); }
for (key, set) in complex_struct.iter() {
println!("Updated Key: {}, Values: {:?}", key, set);
}
let flattened_sum: i32 = complex_struct
.into_iter()
.flat_map(|(_, set)| set) .sum();
println!("Sum of all values: {}", flattened_sum);
let new_struct = ComplexStruct {
data: {
let mut map = HashMap::new();
map.insert("category1", HashSet::from([10, 20]));
map
},
sorted_values: vec![BTreeSet::from([1, 2, 3])],
metadata: [
"meta4".to_string(),
"meta5".to_string(),
"meta6".to_string(),
],
}
.map(|set| set.into_iter().map(|x| x * 2).collect());
for set in new_struct.iter() {
println!("New Values: {:?}", set);
}
}