#[derive(Default, Debug)] struct SrcStruct { key_src: i32 } #[derive(Default, Debug)] struct DestStruct { key_dst: i32 } impl Iterator for DestStruct { type Item = i32; fn next(&mut self) -> Option { Some(self.key_dst) } } fn mapper<'a, I>(src: I) -> impl Iterator where I: IntoIterator, { let objs = src .into_iter() .map(|val|{ DestStruct { key_dst: val.key_src + 10 } }); objs } fn main() { let src = vec![ &SrcStruct{key_src: 1}, &SrcStruct{key_src: 2}, &SrcStruct{key_src: 3}, ]; let dst = mapper(src); for i in dst { println!("dst: {:?}", i.key_dst); } }