#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum SignalingState {
ServerHandshake,
PeerHandshake,
Task,
}
impl SignalingState {
pub fn may_transition_to(self, new_state: Self) -> bool {
match (self, new_state) {
(SignalingState::ServerHandshake, SignalingState::PeerHandshake) => true,
(SignalingState::PeerHandshake, SignalingState::Task) => true,
_ => false,
}
}
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum ServerHandshakeState {
New,
ClientInfoSent,
Done,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum InitiatorHandshakeState {
New,
KeySent,
KeyReceived,
AuthSent,
AuthReceived,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum ResponderHandshakeState {
New,
TokenReceived,
KeyReceived,
KeySent,
AuthReceived,
AuthSent,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn signaling_handshake_validate_transitions() {
let s = SignalingState::ServerHandshake;
let p = SignalingState::PeerHandshake;
let t = SignalingState::Task;
assert!(!s.may_transition_to(s));
assert!(s.may_transition_to(p));
assert!(!s.may_transition_to(t));
assert!(!p.may_transition_to(s));
assert!(!p.may_transition_to(p));
assert!(p.may_transition_to(t));
assert!(!t.may_transition_to(s));
assert!(!t.may_transition_to(p));
assert!(!t.may_transition_to(t));
}
}