raknet_rust/session/
state.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum SessionState {
3 Offline,
4 Req1Recv,
5 Reply1Sent,
6 Req2Recv,
7 Reply2Sent,
8 ConnReqRecv,
9 ConnReqAcceptedSent,
10 NewIncomingRecv,
11 Connected,
12 Closing,
13 Closed,
14}
15
16impl SessionState {
17 pub fn can_transition_to(self, next: SessionState) -> bool {
18 use SessionState as S;
19
20 if self == next {
21 return true;
22 }
23
24 matches!(
25 (self, next),
26 (S::Offline, S::Req1Recv)
27 | (S::Req1Recv, S::Reply1Sent)
28 | (S::Reply1Sent, S::Req2Recv)
29 | (S::Req2Recv, S::Reply2Sent)
30 | (S::Reply2Sent, S::ConnReqRecv)
31 | (S::ConnReqRecv, S::ConnReqAcceptedSent)
32 | (S::ConnReqAcceptedSent, S::NewIncomingRecv)
33 | (S::NewIncomingRecv, S::Connected)
34 | (S::Connected, S::Closing)
35 | (S::Closing, S::Closed)
36 )
37 }
38}