# 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
```rust
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.
```rust
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],
);
}
```