1
use std::str::{FromStr, SplitWhitespace};
2

            
3
use crate::common::SubSystem;
4

            
5
use crate::commands::{
6
    Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
7
};
8

            
9
pub struct Idle;
10

            
11
impl Command for Idle {
12
    type Response = ();
13
    const COMMAND: &'static str = "idle";
14

            
15
    fn parse_request(mut parts: SplitWhitespace<'_>) -> RequestParserResult<'_> {
16
        let result = parts
17
            .next()
18
            .map_or(Ok((Request::Idle(None), "")), |subsystems| {
19
                let subsystems = subsystems
20
                    .split(',')
21
                    .map(|subsystem| SubSystem::from_str(subsystem).unwrap())
22
                    .collect();
23
                Ok((Request::Idle(Some(subsystems)), ""))
24
            });
25

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

            
28
        result
29
    }
30

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