pub struct WrappedIterator<'it, Item> {
prev_iterator: Box<dyn Iterator<Item = Item> + 'it>,
}
impl<'it, Item> WrappedIterator<'it, Item> {
pub fn new<T>(prev_iterator: T) -> Self
where
T: Iterator<Item = Item> + 'it,
{
Self {
prev_iterator: Box::new(prev_iterator),
}
}
}
impl<'it, Item> Iterator for WrappedIterator<'it, Item> {
type Item = Item;
fn next(&mut self) -> Option<Self::Item> {
self.prev_iterator.next()
}
}
pub trait WrapIterator<'s, Item> {
fn wrap_iter(self) -> WrappedIterator<'s, Item>;
}
impl<'s, Item, It> WrapIterator<'s, Item> for It
where
It: IntoIterator<Item = Item> + 's,
{
fn wrap_iter(self) -> WrappedIterator<'s, Item> {
WrappedIterator::new(self.into_iter())
}
}