enum-tools 0.5.5

Automatically derive functions and trait implementations for enums
Documentation
include!("macro/macro.rs");

setup!(#[enum_tools(MAX, next_back)];);

#[test]
fn next_back_gapless() {
    use eg::EG;
    let mut cur = Some(EG::MAX);
    assert_eq!(
        ::core::iter::from_fn(|| {
            let res = cur;
            cur = cur.and_then(EG::next_back);
            res
        })
        .collect::<Vec<_>>(),
        vec![EG::D, EG::C, EG::B, EG::A]
    );
}

#[test]
fn next_back_with_holes() {
    use eh::EH;
    let mut cur = Some(EH::MAX);
    assert_eq!(
        ::core::iter::from_fn(|| {
            let res = cur;
            cur = cur.and_then(EH::next_back);
            res
        })
        .collect::<Vec<_>>(),
        vec![EH::B, EH::C, EH::D, EH::A]
    );
}