kutil_std/iter/
converting.rs

1//
2// ConvertingIterator
3//
4
5/// [Iterator] wrapper that converts its items.
6#[derive(Clone, Debug)]
7pub struct ConvertingIterator<ItemT, InnerIteratorT, InnerItemT> {
8    iterator: InnerIteratorT,
9    convert: fn(InnerItemT) -> ItemT,
10}
11
12impl<ItemT, InnerIteratorT, InnerItemT> ConvertingIterator<ItemT, InnerIteratorT, InnerItemT> {
13    /// Constructor.
14    pub fn new(iterator: InnerIteratorT, convert: fn(InnerItemT) -> ItemT) -> Self {
15        Self { iterator, convert }
16    }
17}
18
19impl<ItemT, InnerIteratorT, InnerItemT> Iterator for ConvertingIterator<ItemT, InnerIteratorT, InnerItemT>
20where
21    InnerIteratorT: Iterator<Item = InnerItemT>,
22{
23    type Item = ItemT;
24
25    fn next(&mut self) -> Option<Self::Item> {
26        self.iterator.next().map(|inner_item| (self.convert)(inner_item))
27    }
28}