Initializer defines the new method on a machine, that accepts any state marked as InitialState, and returns a new machine.
State is a custom that allows to be used as states in a state machine.
This trait is a superset of the State trait.
It's important to realise that we've consumed the original machine in the above example when we transitioned the machine to a different state, and got a newly initialised machine back in the Unlocked state.
The library exposes the sm! Next to those, each valid state + event combination also has its own variant, named By.
Using this library, you declaratively define your state machines as as set of states, connected via transitions, triggered by events.