obrewin_utils/
wrapped_iterator.rs1pub struct WrappedIterator<'it, Item> {
5 prev_iterator: Box<dyn Iterator<Item = Item> + 'it>,
6}
7
8impl<'it, Item> WrappedIterator<'it, Item> {
9 pub fn new<T>(prev_iterator: T) -> Self
11 where
12 T: Iterator<Item = Item> + 'it,
13 {
14 Self {
15 prev_iterator: Box::new(prev_iterator),
16 }
17 }
18}
19
20impl<'it, Item> Iterator for WrappedIterator<'it, Item> {
21 type Item = Item;
22
23 fn next(&mut self) -> Option<Self::Item> {
24 self.prev_iterator.next()
25 }
26}
27
28pub trait WrapIterator<'s, Item> {
30 fn wrap_iter(self) -> WrappedIterator<'s, Item>;
32}
33
34impl<'s, Item, It> WrapIterator<'s, Item> for It
35where
36 It: IntoIterator<Item = Item> + 's,
37{
38 fn wrap_iter(self) -> WrappedIterator<'s, Item> {
39 WrappedIterator::new(self.into_iter())
40 }
41}