orx_iterable/obj_safe/transformations/
flat_mapped.rs1use 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}