1#[derive(Clone, Copy)]
4pub enum Phase {
5 Idle,
6 Loading,
7 Ready,
8 Failed,
9}
10
11#[derive(Clone, Copy)]
12pub enum Reply {
13 Partial,
14 Complete,
15 Failed,
16}
17
18pub fn accept(current: u64, phase: Phase, incoming: u64, reply: Reply) -> Option<Phase> {
22 if current != incoming {
23 return None;
24 }
25 match phase {
26 Phase::Loading => Some(match reply {
27 Reply::Partial => Phase::Loading,
28 Reply::Complete => Phase::Ready,
29 Reply::Failed => Phase::Failed,
30 }),
31 Phase::Idle | Phase::Ready | Phase::Failed => None,
32 }
33}