use core::iter;
use crate::non_empty::NonEmptyIterator;
#[derive(Debug, Clone)]
#[must_use = "non-empty iterators are lazy and do nothing unless consumed"]
pub struct Copied<I: NonEmptyIterator> {
non_empty: I,
}
impl<I: NonEmptyIterator> Copied<I> {
pub const fn new(non_empty: I) -> Self {
Self { non_empty }
}
}
impl<'a, I, T> IntoIterator for Copied<I>
where
I: NonEmptyIterator<Item = &'a T>,
T: Copy + 'a,
{
type Item = T;
type IntoIter = iter::Copied<I::IntoIter>;
fn into_iter(self) -> Self::IntoIter {
self.non_empty.into_iter().copied()
}
}
unsafe impl<'a, I, T> NonEmptyIterator for Copied<I>
where
I: NonEmptyIterator<Item = &'a T>,
T: Copy + 'a,
{
}