#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum SessionPurity {
#[default]
Default,
New,
Self_,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u32)]
pub enum ReleaseMode {
#[default]
Normal = 0,
Deauthenticate = 0x00000002,
}
#[derive(Debug, Clone, Default)]
pub struct DrcpOptions {
pub connection_class: Option<String>,
pub purity: SessionPurity,
pub enabled: bool,
}
impl DrcpOptions {
pub fn new() -> Self {
Self {
connection_class: None,
purity: SessionPurity::Default,
enabled: true,
}
}
pub fn with_connection_class(mut self, class: impl Into<String>) -> Self {
self.connection_class = Some(class.into());
self
}
pub fn with_purity(mut self, purity: SessionPurity) -> Self {
self.purity = purity;
self
}
pub fn disabled(mut self) -> Self {
self.enabled = false;
self
}
pub fn is_enabled(&self) -> bool {
self.enabled
}
}
#[derive(Debug, Clone, Default)]
pub struct DrcpSession {
pub is_held: bool,
pub tag: Option<String>,
pub state_changed: bool,
}
impl DrcpSession {
pub fn new() -> Self {
Self::default()
}
pub fn set_held(&mut self, held: bool) {
self.is_held = held;
}
pub fn set_tag(&mut self, tag: Option<String>) {
self.tag = tag;
}
pub fn is_state_changed(&self) -> bool {
self.state_changed
}
pub fn mark_state_changed(&mut self) {
self.state_changed = true;
}
pub fn clear_state_changed(&mut self) {
self.state_changed = false;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_drcp_options_default() {
let opts = DrcpOptions::new();
assert!(opts.enabled);
assert!(opts.connection_class.is_none());
assert_eq!(opts.purity, SessionPurity::Default);
}
#[test]
fn test_drcp_options_builder() {
let opts = DrcpOptions::new()
.with_connection_class("MyApp")
.with_purity(SessionPurity::New);
assert!(opts.is_enabled());
assert_eq!(opts.connection_class, Some("MyApp".to_string()));
assert_eq!(opts.purity, SessionPurity::New);
}
#[test]
fn test_drcp_options_disabled() {
let opts = DrcpOptions::new().disabled();
assert!(!opts.is_enabled());
}
#[test]
fn test_drcp_session_state() {
let mut session = DrcpSession::new();
assert!(!session.is_held);
session.set_held(true);
assert!(session.is_held);
session.set_tag(Some("tag1".to_string()));
assert_eq!(session.tag, Some("tag1".to_string()));
}
#[test]
fn test_drcp_session_state_changed() {
let mut session = DrcpSession::new();
assert!(!session.is_state_changed());
session.mark_state_changed();
assert!(session.is_state_changed());
session.clear_state_changed();
assert!(!session.is_state_changed());
}
#[test]
fn test_session_purity_values() {
assert_eq!(SessionPurity::Default, SessionPurity::default());
}
#[test]
fn test_release_mode_values() {
assert_eq!(ReleaseMode::Normal as u32, 0);
assert_eq!(ReleaseMode::Deauthenticate as u32, 0x00000002);
}
}