use super::SpeakerId;
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Speaker {
pub id: SpeakerId,
pub name: String,
pub room_name: String,
pub ip_address: IpAddr,
pub port: u16,
pub model_name: String,
pub software_version: String,
pub boot_seq: u32,
pub satellites: Vec<SpeakerId>,
}
impl Speaker {
pub fn get_id(&self) -> &SpeakerId {
&self.id
}
pub fn address(&self) -> String {
format!("{}:{}", self.ip_address, self.port)
}
}
#[cfg(test)]
mod tests {
use super::*;
fn create_test_speaker() -> Speaker {
Speaker {
id: SpeakerId::new("RINCON_123"),
name: "Living Room".to_string(),
room_name: "Living Room".to_string(),
ip_address: "192.168.1.100".parse().unwrap(),
port: 1400,
model_name: "Sonos One".to_string(),
software_version: "56.0-76060".to_string(),
boot_seq: 0,
satellites: vec![],
}
}
#[test]
fn test_get_id() {
let speaker = create_test_speaker();
assert_eq!(speaker.get_id().as_str(), "RINCON_123");
}
#[test]
fn test_address() {
let speaker = create_test_speaker();
assert_eq!(speaker.address(), "192.168.1.100:1400");
}
}