local_vec 0.5.0

fixed-capacity vector allocated on the stack
Documentation
use crate::LocalVec;
use std::iter::{Iterator, IntoIterator};

impl<T, const N: usize> IntoIterator for LocalVec<T, N> {
    type Item = T;

    type IntoIter = LocalVecIter<T, N>;

    fn into_iter(self) -> LocalVecIter<T, N> {
        let mut vec = self;
        vec.reverse();
        
        LocalVecIter {
            elems: vec,
        }
    }
}

pub struct LocalVecIter<T, const N: usize> {
    elems: LocalVec<T, N>,
}

impl<T, const N: usize> Iterator for LocalVecIter<T, N> {
    type Item = T;

    fn next(&mut self) -> Option<T> {
        self.elems.pop()
    }
}

#[cfg(test)]
mod tests {
    use super::LocalVec;

    #[test]
    fn test_iter() {
        let vec = LocalVec::<_, 3>::from_array([1, 2, 3]);
        let mut iter = vec.into_iter();
        matches!(iter.next(), Some(1));
        matches!(iter.next(), Some(2));
        matches!(iter.next(), Some(3));
        matches!(iter.next(), None);
        matches!(iter.next(), None);
    }

    #[test]
    fn test_iter_empty() {
        let vec = LocalVec::<usize, 2>::new();
        let mut iter = vec.into_iter();
        matches!(iter.next(), None);
        matches!(iter.next(), None);
    }

    #[test]
    fn test_iter_zero_cap() {
        let vec = LocalVec::<usize, 0>::new();
        let mut iter = vec.into_iter();
        matches!(iter.next(), None);
        matches!(iter.next(), None);
    }
}