keepops 0.0.2

Extension traits for keeping the input of mapping functions
Documentation
use crate::keep_map_single::KeepMapSingle;
use crate::tuple_family::RunSingle;

#[derive(Clone)]
pub struct KeepMap<I, F> {
    pub(crate) iter: I,
    f: F,
}

impl<B, I: Iterator, F> Iterator for KeepMap<I, F>
where
    F: FnMut(&I::Item) -> B,
{
    type Item = RunSingle<I::Item, B>;
    fn next(&mut self) -> Option<Self::Item> {
        self.iter.next().keep_map(&mut self.f)
    }
}

pub trait KeepMapSingleIteratorExtension: Iterator {
    fn keep_map<F, B>(self, f: F) -> KeepMap<Self, F>
    where
        F: FnMut(&Self::Item) -> B,
        Self: Sized,
    {
        KeepMap { iter: self, f }
    }
}

impl<I: Iterator> KeepMapSingleIteratorExtension for I {}