1
use std::str::SplitWhitespace;
2

            
3
use serde::{Deserialize, Serialize};
4

            
5
use crate::{
6
    commands::RequestParserError,
7
    common::{Priority, Tag},
8
};
9

            
10
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11
pub enum CaseSensitivity {
12
    CaseSensitive,
13
    CaseInsensitive,
14
    CommandDependent,
15
}
16

            
17
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18
pub enum Filter {
19
    Not(Box<Filter>),
20
    And(Box<Filter>, Box<Filter>),
21

            
22
    EqTag(Tag, String, CaseSensitivity),
23
    Contains(Tag, String, CaseSensitivity),
24
    StartsWith(Tag, String, CaseSensitivity),
25
    PerlRegex(Tag, String),
26
    NegPerlRegex(Tag, String),
27
    EqUri(String),
28
    Base(String),
29
    ModifiedSince(u64),
30
    AudioFormatEq {
31
        sample_rate: u32,
32
        bits: u8,
33
        channels: u8,
34
    },
35
    AudioFormatEqMask {
36
        sample_rate: Option<u32>,
37
        bits: Option<u8>,
38
        channels: Option<u8>,
39
    },
40
    PrioCmp(Priority),
41
}
42

            
43
pub fn parse_filter(parts: &mut SplitWhitespace<'_>) -> Result<Filter, RequestParserError> {
44
    todo!()
45
}