#![doc = include_str!("../README.md")]
pub trait EndiateIteratorExt: Sized {
fn endiate(self) -> Endiate<Self>;
fn nendiate(self) -> NEndiate<Self>;
}
impl<Iter: ExactSizeIterator> EndiateIteratorExt for Iter {
fn endiate(self) -> Endiate<Self> {
Endiate(self)
}
fn nendiate(self) -> NEndiate<Self> {
NEndiate(Endiate(self))
}
}
pub struct Endiate<Iter>(pub(crate) Iter);
pub struct NEndiate<Iter>(pub(crate) Endiate<Iter>);
impl<Iter: ExactSizeIterator> Iterator for Endiate<Iter> {
type Item = (bool, Iter::Item);
fn next(&mut self) -> Option<Self::Item> {
self.0.next().map(|v| (self.0.len() == 0, v))
}
}
impl<Iter: ExactSizeIterator> Iterator for NEndiate<Iter> {
type Item = (bool, Iter::Item);
fn next(&mut self) -> Option<Self::Item> {
self.0.next().map(|(at_end, v)| (!at_end, v))
}
}
impl<Iter: ExactSizeIterator> ExactSizeIterator for Endiate<Iter> {}
impl<Iter: ExactSizeIterator> ExactSizeIterator for NEndiate<Iter> {}