arrayset 3.1.1

An array-backed ordered set type.
Documentation
use core::{
    iter::{FusedIterator, Zip},
    slice,
};

#[derive(Clone, Debug)]
pub struct Iter<'a, K, V>(Zip<slice::Iter<'a, K>, slice::Iter<'a, V>>);

impl<'a, K, V> Iter<'a, K, V>
where
    K: 'a,
    V: 'a,
{
    pub(super) fn new(keys: &'a [K], values: &'a [V]) -> Self {
        Self(keys.iter().zip(values.iter()))
    }
}

impl<'a, K, V> Iterator for Iter<'a, K, V>
where
    K: 'a,
    V: 'a,
{
    type Item = (&'a K, &'a V);

    fn next(&mut self) -> Option<Self::Item> {
        self.0.next()
    }

    fn size_hint(&self) -> (usize, Option<usize>) {
        self.0.size_hint()
    }
}

impl<'a, K, V> DoubleEndedIterator for Iter<'a, K, V>
where
    K: 'a,
    V: 'a,
{
    fn next_back(&mut self) -> Option<Self::Item> {
        self.0.next_back()
    }
}

impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> {}
impl<'a, K, V> FusedIterator for Iter<'a, K, V> {}