orx_iterable/obj_safe/transformations/
flat_mapped.rs

1use crate::{
2    obj_safe::IterableObj,
3    transformations::{FlatMapped, FlatMappedIter},
4    Iterable,
5};
6use std::boxed::Box;
7
8impl<I, M, U> IterableObj for FlatMapped<I, M, U>
9where
10    I: Iterable,
11    U: IntoIterator,
12    M: Fn(I::Item) -> U + Copy,
13{
14    type Item = U::Item;
15
16    fn boxed_iter(&self) -> Box<dyn Iterator<Item = Self::Item> + '_> {
17        let mut iter1 = self.it.iter();
18        let iterable2: Option<U> = iter1.next().map(self.flat_map);
19        let iter2: Option<U::IntoIter> = iterable2.map(|x| x.into_iter());
20
21        Box::new(FlatMappedIter::<I, M, U> {
22            flat_map: self.flat_map,
23            iter1,
24            iter2,
25        })
26    }
27}