multindex 0.1.3

Index slices with multiple const indices/ranges.
Documentation
use crate::error::Error;

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum AreAllDisjoint<T = ()> {
    No(T),
    Yes,
}

impl AreAllDisjoint {
    pub const YES: Self = AreAllDisjoint::Yes;
    pub const NO: Self = AreAllDisjoint::No(());
}

impl AreAllDisjoint<()> {
    pub const fn with_dummy_error(self) -> AreAllDisjoint<Error> {
        match self {
            AreAllDisjoint::No(()) => {
                let err = Error::OverlappingIndexArgs {
                    left: u16::MAX,
                    right: u16::MAX,
                };
                AreAllDisjoint::No(err)
            }
            AreAllDisjoint::Yes => AreAllDisjoint::Yes,
        }
    }
}
impl AreAllDisjoint<Error> {
    pub const fn check_is_expected<T>(self, expected: &AreAllDisjoint<T>) -> Result<(), Error> {
        match (self, expected) {
            (AreAllDisjoint::Yes, _) => Ok(()),
            (_, AreAllDisjoint::No(_)) => Ok(()),
            (AreAllDisjoint::No(x), AreAllDisjoint::Yes) => Err(x),
        }
    }
}