use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AudioDevice {
pub id: String,
pub name: String,
pub is_default: bool,
pub direction: DeviceDirection,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DeviceDirection {
Input,
Output,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn audio_device_creation_and_field_access() {
let dev = AudioDevice {
id: "hw:0".to_string(),
name: "Built-in Microphone".to_string(),
is_default: true,
direction: DeviceDirection::Input,
};
assert_eq!(dev.id, "hw:0");
assert_eq!(dev.name, "Built-in Microphone");
assert!(dev.is_default);
assert_eq!(dev.direction, DeviceDirection::Input);
}
#[test]
fn audio_device_non_default_output() {
let dev = AudioDevice {
id: "hw:1".to_string(),
name: "HDMI Output".to_string(),
is_default: false,
direction: DeviceDirection::Output,
};
assert!(!dev.is_default);
assert_eq!(dev.direction, DeviceDirection::Output);
}
#[test]
fn device_direction_variants_are_distinct() {
assert_ne!(DeviceDirection::Input, DeviceDirection::Output);
}
}