pubtraitStateMachine<S> {/// Returns true if it changed state successfully; false otherwise.
fnchange(&mutself, new_state: S)->bool;/// Returns true if it is possible to change state to `new_state`; false otherwise.
fncan_change(&self, new_state: S)->bool;/// Returns true if it is a one of finish states.
fnis_finish_state(state: S)->bool;/// Returns true if the FSM is in a finish state.
fnat_finish_state(&self)->bool;/// Returns a number of total finish states.
fnfinish_states()->usize;}