use parametrized::*;
#[parametrized(default = [0, 1], into_iter = [0, 1], iter_mut = [0, 1], map = [0])]
struct MyStruct<K, V> {
key: K,
value: Vec<Option<V>>,
metadata: Vec<String>,
}
fn main() {
let mut my_struct = MyStruct {
key: "example_key",
value: vec![Some(1), None, Some(3), Some(4)],
metadata: vec!["meta1".to_string(), "meta2".to_string()],
};
for val in my_struct.param_iter() {
println!("Value: {:?}", val);
}
for val in my_struct.param_iter_mut() {
let val: &mut usize = val;
*val += 1;
}
for val in my_struct.param_iter() {
println!("Updated Value: {:?}", val);
}
let sum: i32 = my_struct.param_into_iter().filter_map(|x| x).sum();
println!("Sum: {}", sum);
let new_struct = MyStruct {
key: "new_key",
value: vec![Some(10), Some(20), None],
metadata: vec!["meta3".to_string(), "meta4".to_string()],
}
.map(|x| x.map(|v| v * 2));
for val in new_struct.iter() {
println!("New Value: {:?}", val);
}
}