1
use crate::{
2
    commands::{Command, RequestParserError, ResponseParserError},
3
    common::types::AudioOutputId,
4
    request_tokenizer::RequestTokenizer,
5
    response_tokenizer::ResponseAttributes,
6
};
7

            
8
pub struct ToggleOutput;
9

            
10
pub type ToggleOutputRequest = AudioOutputId;
11

            
12
impl Command for ToggleOutput {
13
    type Request = ToggleOutputRequest;
14
    type Response = ();
15
    const COMMAND: &'static str = "toggleoutput";
16

            
17
    fn serialize_request(&self, request: Self::Request) -> String {
18
        format!("{} {}", Self::COMMAND, request)
19
    }
20

            
21
    fn parse_request(mut parts: RequestTokenizer<'_>) -> Result<Self::Request, RequestParserError> {
22
        let output_id = parts.next().ok_or(RequestParserError::UnexpectedEOF)?;
23
        let output_id = output_id
24
            .parse()
25
            .map_err(|_| RequestParserError::SyntaxError(0, output_id.to_owned()))?;
26

            
27
        debug_assert!(parts.next().is_none());
28

            
29
        Ok(output_id)
30
    }
31

            
32
    fn parse_response(
33
        parts: ResponseAttributes<'_>,
34
    ) -> Result<Self::Response, ResponseParserError<'_>> {
35
        debug_assert!(parts.is_empty());
36
        Ok(())
37
    }
38
}