diff options
Diffstat (limited to 'src/statemachine.rs')
-rw-r--r-- | src/statemachine.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/statemachine.rs b/src/statemachine.rs new file mode 100644 index 0000000..a8b471d --- /dev/null +++ b/src/statemachine.rs @@ -0,0 +1,45 @@ +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); + } +} |