1
use crate::{
2
    commands::{CommandRequest, RequestParserError, empty_command_response},
3
    request_tokenizer::RequestTokenizer,
4
};
5

            
6
pub struct RepeatRequest(bool);
7

            
8
impl RepeatRequest {
9
    pub fn new(state: bool) -> Self {
10
        RepeatRequest(state)
11
    }
12
}
13

            
14
impl CommandRequest for RepeatRequest {
15
    type Response = RepeatResponse;
16

            
17
    const COMMAND: &'static str = "repeat";
18
    const MIN_ARGS: u32 = 1;
19
    const MAX_ARGS: Option<u32> = Some(1);
20

            
21
    fn serialize(&self) -> String {
22
        let state = if self.0 { "1" } else { "0" };
23
        format!("{} {}\n", Self::COMMAND, state)
24
    }
25

            
26
    fn parse(mut parts: RequestTokenizer<'_>) -> Result<Self, RequestParserError> {
27
        let state = match parts.next() {
28
            Some("0") => false,
29
            Some("1") => true,
30
            Some(s) => {
31
                return Err(RequestParserError::SubtypeParserError {
32
                    argument_index: 0,
33
                    expected_type: "bool",
34
                    raw_input: s.to_owned(),
35
                });
36
            }
37
            None => return Err(Self::missing_arguments_error(0)),
38
        };
39

            
40
        Self::throw_if_too_many_arguments(parts)?;
41

            
42
        Ok(RepeatRequest(state))
43
    }
44
}
45

            
46
empty_command_response!(Repeat);