Enum + match — implement state machines.
Definition:
1enum State {2 Idle,3 Running,4 Paused,5 Stopped,6}78impl State {9 fn start(self) -> State {10 match self {11 State::Idle => State::Running,12 _ => self,13 }14 }1516 fn pause(self) -> State {17 match self {18 State::Running => State::Paused,19 _ => self,20 }21 }2223 fn stop(self) -> State {24 match self {25 State::Running | State::Paused => State::Stopped,26 _ => self,27 }28 }29}
Usage:
1let state = State::Idle;2let state = state.start(); // Running3let state = state.pause(); // Paused4let state = state.stop(); // Stopped
Key: Enum for states, match for transitions.