No Rust, but here's a Python implementation that I have built on top of before:
https://github.com/pytransitions/transitionsYou 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.