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}