capped_collections 0.2.0

Collections with compile-time set capacities.
Documentation
use core::fmt::Debug;


pub struct Iter<'a, K: 'a, V: 'a>
{

    slice_iter: core::slice::Iter<'a, Option<(K, V)>>

}

impl<'a, K, V> Iter<'a, K, V>
{

    pub fn new(slice_iter: core::slice::Iter<'a, Option<(K, V)>>) -> Self
    {

        Self
        {

            slice_iter

        }

    }

}

impl<'a, K, V> Iterator for Iter<'a, K, V>
{

    type Item = &'a (K, V);

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

        //Loop to skip any empty elements.

        loop
        {

            let next_slice_iter = self.slice_iter.next();

            if let Some(key_value_opt) = next_slice_iter
            {

                if let Some(key_value_ref) = key_value_opt
                {

                    return Some(key_value_ref);

                }

            }
            else
            {
                
                break;

            }
            
        }
        
        None

    }

}

impl<'a, K, V> Debug for Iter<'a, K, V>
    where K: Debug, V: Debug
{

    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        f.debug_struct("Iter").field("slice_iter", &self.slice_iter).finish()
    }

}

impl<'a, K, V> Default for Iter<'a, K, V>
    where K: Default, V: Default
{

    fn default() -> Self {
        Self { slice_iter: Default::default() }
    }

}

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