use core::iter;
use non_zero_size::Size;
use crate::non_empty::NonEmptyIterator;
#[derive(Debug, Clone)]
#[must_use = "non-empty iterators are lazy and do nothing unless consumed"]
pub struct StepBy<I: NonEmptyIterator> {
non_empty: I,
step: Size,
}
impl<I: NonEmptyIterator> StepBy<I> {
pub const fn new(non_empty: I, step: Size) -> Self {
Self { non_empty, step }
}
}
impl<I: NonEmptyIterator> IntoIterator for StepBy<I> {
type Item = I::Item;
type IntoIter = iter::StepBy<I::IntoIter>;
fn into_iter(self) -> Self::IntoIter {
self.non_empty.into_iter().step_by(self.step.get())
}
}
unsafe impl<I: NonEmptyIterator> NonEmptyIterator for StepBy<I> {}