diff --git a/src/commands/audio_output_devices/disableoutput.rs b/src/commands/audio_output_devices/disableoutput.rs index e86c236..54fc78c 100644 --- a/src/commands/audio_output_devices/disableoutput.rs +++ b/src/commands/audio_output_devices/disableoutput.rs @@ -20,10 +20,13 @@ impl Command for DisableOutput { fn parse_request(mut parts: RequestTokenizer<'_>) -> RequestParserResult<'_> { let output_id = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; + let output_id = output_id + .parse() + .map_err(|_| RequestParserError::SyntaxError(0, output_id.to_owned()))?; debug_assert!(parts.next().is_none()); - Ok((Request::DisableOutput(output_id.to_string()), "")) + Ok((Request::DisableOutput(output_id), "")) } fn parse_response( diff --git a/src/commands/audio_output_devices/enableoutput.rs b/src/commands/audio_output_devices/enableoutput.rs index 403f5d5..e8c45ab 100644 --- a/src/commands/audio_output_devices/enableoutput.rs +++ b/src/commands/audio_output_devices/enableoutput.rs @@ -20,10 +20,13 @@ impl Command for EnableOutput { fn parse_request(mut parts: RequestTokenizer<'_>) -> RequestParserResult<'_> { let output_id = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; + let output_id = output_id + .parse() + .map_err(|_| RequestParserError::SyntaxError(0, output_id.to_owned()))?; debug_assert!(parts.next().is_none()); - Ok((Request::EnableOutput(output_id.to_string()), "")) + Ok((Request::EnableOutput(output_id), "")) } fn parse_response( diff --git a/src/commands/audio_output_devices/outputs.rs b/src/commands/audio_output_devices/outputs.rs index dd1697d..37a9ab6 100644 --- a/src/commands/audio_output_devices/outputs.rs +++ b/src/commands/audio_output_devices/outputs.rs @@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize}; use crate::{ commands::{Command, Request, RequestParserResult, ResponseParserError}, + common::AudioOutputId, request_tokenizer::RequestTokenizer, response_tokenizer::{ResponseAttributes, expect_property_type}, }; @@ -12,7 +13,7 @@ pub struct Outputs; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct Output { - pub id: u64, + pub id: AudioOutputId, pub name: String, pub plugin: String, pub enabled: bool, @@ -40,7 +41,7 @@ impl Command for Outputs { ) -> Result> { let mut outputs = Vec::new(); - let mut id: Option = None; + let mut id: Option = None; let mut name: Option = None; let mut plugin: Option = None; let mut enabled: Option = None; @@ -64,7 +65,7 @@ impl Command for Outputs { attributes = HashMap::new(); let id_s = expect_property_type!(Some(v), k, Text); id = Some( - id_s.parse::() + id_s.parse() .map_err(|_| ResponseParserError::SyntaxError(0, id_s))?, ); } diff --git a/src/commands/audio_output_devices/outputset.rs b/src/commands/audio_output_devices/outputset.rs index e7b1a25..f595509 100644 --- a/src/commands/audio_output_devices/outputset.rs +++ b/src/commands/audio_output_devices/outputset.rs @@ -33,6 +33,9 @@ impl Command for OutputSet { fn parse_request(mut parts: RequestTokenizer<'_>) -> RequestParserResult<'_> { let output_id = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; + let output_id = output_id + .parse() + .map_err(|_| RequestParserError::SyntaxError(0, output_id.to_owned()))?; let attribute_name = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; let attribute_value = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; @@ -40,7 +43,7 @@ impl Command for OutputSet { Ok(( Request::OutputSet( - output_id.to_string(), + output_id, attribute_name.to_string(), attribute_value.to_string(), ), diff --git a/src/commands/audio_output_devices/toggleoutput.rs b/src/commands/audio_output_devices/toggleoutput.rs index 89f4ed4..87d8ad8 100644 --- a/src/commands/audio_output_devices/toggleoutput.rs +++ b/src/commands/audio_output_devices/toggleoutput.rs @@ -20,10 +20,13 @@ impl Command for ToggleOutput { fn parse_request(mut parts: RequestTokenizer<'_>) -> RequestParserResult<'_> { let output_id = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; + let output_id = output_id + .parse() + .map_err(|_| RequestParserError::SyntaxError(0, output_id.to_owned()))?; debug_assert!(parts.next().is_none()); - Ok((Request::ToggleOutput(output_id.to_string()), "")) + Ok((Request::ToggleOutput(output_id), "")) } fn parse_response( diff --git a/src/common/types.rs b/src/common/types.rs index 7a36b7a..30b4e7b 100644 --- a/src/common/types.rs +++ b/src/common/types.rs @@ -30,6 +30,7 @@ pub use time_interval::TimeInterval; pub use volume_value::VolumeValue; pub use window_range::WindowRange; +pub type AudioOutputId = u32; pub type Offset = u32; pub type PlaylistName = String; pub type PlaylistVersion = u32; @@ -40,7 +41,6 @@ pub type SongPosition = u32; pub type TimeWithFractions = f64; // TODO: use a proper types -pub type AudioOutputId = String; pub type Feature = String; pub type PartitionName = String; pub type Path = String;