struct Init; struct Master; struct Backup; enum Event { Startup, Shutdown, MasterDownTimer, AdvertTimer, } impl Init { fn new() -> Init { Init {} } } trait VRRPv2StateMachine { fn next(&self, event: Event) -> impl VRRPv2StateMachine; } impl VRRPv2StateMachine for Init { fn next(&self, _event: Event) -> impl VRRPv2StateMachine { Master {} } } impl VRRPv2StateMachine for Master { fn next(&self, _event: Event) -> impl VRRPv2StateMachine { Backup {} } } impl VRRPv2StateMachine for Backup { fn next(&self, _event: Event) -> impl VRRPv2StateMachine { Init {} } } pub fn run() { let sm = Init::new(); loop { let _ = sm.next(Event::Startup); } }