use arcp_core::ids::SessionId;
use arcp_core::messages::Capabilities;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum HandshakePhase {
Opened,
Challenged,
Accepted,
Closed,
}
#[derive(Debug, Clone)]
pub struct SessionState {
pub session_id: SessionId,
pub principal: Option<String>,
pub capabilities: Capabilities,
pub phase: HandshakePhase,
pub active_challenge: Option<String>,
}
impl SessionState {
#[must_use]
pub const fn new(session_id: SessionId, capabilities: Capabilities) -> Self {
Self {
session_id,
principal: None,
capabilities,
phase: HandshakePhase::Opened,
active_challenge: None,
}
}
#[must_use]
pub const fn is_accepted(&self) -> bool {
matches!(self.phase, HandshakePhase::Accepted)
}
}