traiter 4.0.0

Traits collection.
Documentation
use core::slice::{Iter, IterMut};

use super::traits::{
    Emptiable, Iterable, Lengthsome, MutablyIterable, ValueContainer,
};

impl<Element, const LENGTH: usize> Emptiable for [Element; LENGTH] {
    fn is_empty(self) -> bool {
        LENGTH == 0
    }
}

impl<Element, const LENGTH: usize> Emptiable for &[Element; LENGTH] {
    fn is_empty(self) -> bool {
        LENGTH == 0
    }
}

impl<Element, const LENGTH: usize> Emptiable for &mut [Element; LENGTH] {
    fn is_empty(self) -> bool {
        LENGTH == 0
    }
}

impl<'a, Element, const LENGTH: usize> Iterable for &'a [Element; LENGTH] {
    type Item = &'a Element;
    type Output = Iter<'a, Element>;

    fn iter(self) -> Self::Output {
        self.as_slice().iter()
    }
}

impl<'a, Element, const LENGTH: usize> Iterable for &'a mut [Element; LENGTH] {
    type Item = &'a Element;
    type Output = Iter<'a, Element>;

    fn iter(self) -> Self::Output {
        self.as_slice().iter()
    }
}

impl<Element, const LENGTH: usize> Lengthsome for [Element; LENGTH] {
    type Length = usize;

    fn len(self) -> Self::Length {
        LENGTH
    }
}

impl<Element, const LENGTH: usize> Lengthsome for &[Element; LENGTH] {
    type Length = usize;

    fn len(self) -> Self::Length {
        LENGTH
    }
}

impl<Element, const LENGTH: usize> Lengthsome for &mut [Element; LENGTH] {
    type Length = usize;

    fn len(self) -> Self::Length {
        LENGTH
    }
}

impl<'a, Element, const LENGTH: usize> MutablyIterable
    for &'a mut [Element; LENGTH]
{
    type Item = &'a mut Element;
    type Output = IterMut<'a, Element>;

    fn iter_mut(self) -> Self::Output {
        self.as_mut_slice().iter_mut()
    }
}

impl<'a, Element: PartialEq, const LENGTH: usize> ValueContainer
    for &'a [Element; LENGTH]
{
    type Value = &'a Element;

    fn contains_value(self, value: Self::Value) -> bool {
        <[Element]>::contains(self, value)
    }
}

impl<'a, Element: PartialEq, const LENGTH: usize> ValueContainer
    for &'a mut [Element; LENGTH]
{
    type Value = &'a Element;

    fn contains_value(self, value: Self::Value) -> bool {
        <[Element]>::contains(self, value)
    }
}