#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Role {
Initiator,
Responder,
}
impl Role {
pub fn is_initiator(self) -> bool {
matches!(self, Role::Initiator)
}
pub fn is_responder(self) -> bool {
matches!(self, Role::Responder)
}
pub fn peer(self) -> Role {
match self {
Role::Initiator => Role::Responder,
Role::Responder => Role::Initiator,
}
}
pub fn header_initiator_flag(self) -> bool {
self.is_initiator()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn roles_are_symmetric() {
assert_eq!(Role::Initiator.peer(), Role::Responder);
assert_eq!(Role::Responder.peer().peer(), Role::Responder);
assert!(Role::Initiator.header_initiator_flag());
assert!(!Role::Responder.header_initiator_flag());
}
}