basic/
basic.rs

1use stable_step::{Step, StepExt};
2
3#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
4enum MyEnum {
5    A,
6    B,
7    C,
8    D,
9    E,
10    F,
11}
12
13impl Step for MyEnum {
14    const MIN: Self = Self::A;
15    const MAX: Self = Self::F;
16
17    fn next(&self) -> Option<Self>
18    where
19        Self: Sized,
20    {
21        match self {
22            Self::A => Some(Self::B),
23            Self::B => Some(Self::C),
24            Self::C => Some(Self::D),
25            Self::D => Some(Self::E),
26            Self::E => Some(Self::F),
27            Self::F => None,
28        }
29    }
30
31    fn prev(&self) -> Option<Self>
32    where
33        Self: Sized,
34    {
35        match self {
36            Self::A => None,
37            Self::B => Some(Self::A),
38            Self::C => Some(Self::B),
39            Self::D => Some(Self::C),
40            Self::E => Some(Self::D),
41            Self::F => Some(Self::E),
42        }
43    }
44}
45
46fn main() {
47    println!("All");
48    for value in MyEnum::iter() {
49        println!("{:?}", value);
50    }
51
52    println!("Subset");
53    for value in MyEnum::B.iter_to(MyEnum::E) {
54        println!("{:?}", value);
55    }
56
57    println!("Reversed");
58    for value in MyEnum::B.iter_to_inclusive(MyEnum::E).rev() {
59        println!("{:?}", value);
60    }
61}