1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use {
    crate::*,
};

/// A filter for HTTP methods
#[derive(Debug, Clone, Copy)]
pub struct MethodFilter {
    negative: bool,
    method: Method,
}

impl MethodFilter {
    pub fn from_str(mut pattern: &str) -> Self {
        let negative = pattern.starts_with('!');
        if negative {
            pattern = &pattern[1..];
        }
        let method = Method::from(pattern);
        Self { negative, method }
    }
    pub fn contains(self, candidate: Method) -> bool {
        if self.negative {
            self.method != candidate
        } else {
            self.method == candidate
        }
    }
}