Sure but how does that work with the provided implementation where all states can only transition to a single state, this is ensured at compile time. What does the code look like that allows a state to transition to one of several other states?
You add the concept of finite "triggers", where [state i] + [trigger result j] always takes you to [new state](which could be the same state if you want)
Triggers are just functions where anything could be happening - coin flip, API call, but they return one of an enumerated set of results so the machine can always use their result to go to another state.
impl State<Running> {
pub fn next(self, Trigger<Hibernate>) -> State<Hibernate> {
State { _inner: Hibernate {} }
}
pub fn next(self, Trigger<Terminate>) -> State<Terminate> {
State { _inner: Terminate {} }
}
}