1
use crate::{
2
    commands::{
3
        Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
4
        ResponseParserError,
5
    },
6
    filter::parse_filter,
7
};
8

            
9
pub struct SearchAdd;
10

            
11
pub struct SearchAddResponse {}
12

            
13
impl Command for SearchAdd {
14
    type Response = SearchAddResponse;
15
    const COMMAND: &'static str = "searchadd";
16

            
17
    fn parse_request(mut parts: std::str::SplitWhitespace<'_>) -> RequestParserResult<'_> {
18
        let filter = parse_filter(&mut parts)?;
19

            
20
        let mut sort_or_window_or_position = parts.next();
21
        let mut sort = None;
22
        if let Some("sort") = sort_or_window_or_position {
23
            sort = Some(
24
                parts
25
                    .next()
26
                    .ok_or(RequestParserError::UnexpectedEOF)?
27
                    .to_string(),
28
            );
29
            sort_or_window_or_position = parts.next();
30
        }
31

            
32
        let mut window = None;
33
        if let Some("window") = sort_or_window_or_position {
34
            let w = parts.next().ok_or(RequestParserError::UnexpectedEOF)?;
35
            window = Some(
36
                w.parse()
37
                    .map_err(|_| RequestParserError::SyntaxError(0, w.to_string()))?,
38
            );
39
            sort_or_window_or_position = parts.next();
40
        }
41

            
42
        let mut position = None;
43
        if let Some("position") = sort_or_window_or_position {
44
            let p = parts.next().ok_or(RequestParserError::UnexpectedEOF)?;
45
            position = Some(
46
                p.parse()
47
                    .map_err(|_| RequestParserError::SyntaxError(0, p.to_string()))?,
48
            );
49
        }
50

            
51
        debug_assert!(parts.next().is_none());
52

            
53
        Ok((Request::SearchAdd(filter, sort, window, position), ""))
54
    }
55

            
56
    fn parse_response(
57
        parts: ResponseAttributes<'_>,
58
    ) -> Result<Self::Response, ResponseParserError> {
59
        unimplemented!()
60
    }
61
}