enum-rotate

Crates.ioenum-rotate
lib.rsenum-rotate
version0.1.1
sourcesrc
created_at2024-03-25 08:36:58.252999
updated_at2024-03-25 09:38:40.947277
descriptionRotate and iterate your enums
homepage
repositoryhttps://github.com/gorilskij/enum-rotate
max_upload_size
id1185079
size26,997
Pietro Gorilskij (gorilskij)

documentation

README

Enum Rotate

Version Minimum Rust version: 1.36

Treat your enums as iterators.

This crate provides the EnumRotate trait along with the accompanying derive macro allowing you to

  • Get the next and previous variant for any variant of an enum
  • Iterate over variants of an enum in a predefined (and customizable) order
  • Iterate over variants of an enum starting from a particular variant

Usage

use enum_rotate::EnumRotate;
use Enum::*;

#[derive(EnumRotate, PartialEq)]
enum Enum { A, B, C }

fn main() {
    assert_eq!(A.next(), B);
    assert_eq!(A.prev(), C);

    assert_eq!(
        Enum::iter().collect::<Vec<_>>(),
        vec![A, B, C],
    );
    
    assert_eq!(
        C.iter_from().collect::<Vec<_>>(),
        vec![C, A, B],
    );
}

It is also possible to specify a custom iteration order for the enum variants.

use enum_rotate::EnumRotate;
use Enum::*;

#[derive(EnumRotate, PartialEq)]
#[iteration_order(B, A, C)]
enum Enum { A, B, C }

fn main() {
    assert_eq!(
        Enum::iter().collect::<Vec<_>>(),
        vec![B, A, C],
    );
}
Commit count: 14

cargo fmt