2 releases
0.1.1 | Mar 25, 2024 |
---|---|
0.1.0 | Mar 25, 2024 |
#1047 in Rust patterns
8KB
Enum Rotate
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],
);
}
Dependencies
~280–730KB
~17K SLoC