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
30
31
32
33
34
35
36
37
38
39
use gotham::router::non_match::RouteNonMatch;
use gotham::router::route::matcher::RouteMatcher;
use gotham::state::{FromState, State};
use gotham::hyper::{HeaderMap, StatusCode};
#[cfg(test)]
mod unittest;
#[derive(Clone)]
pub struct HeaderEqualsRouteMatcher {
header_name: String,
header_value: Vec<u8>,
}
impl HeaderEqualsRouteMatcher {
pub fn new(header_name: String, header_value: Vec<u8>) -> Self {
HeaderEqualsRouteMatcher {
header_name,
header_value,
}
}
}
impl RouteMatcher for HeaderEqualsRouteMatcher {
fn is_match(&self, state: &State) -> Result<(), RouteNonMatch> {
match HeaderMap::borrow_from(state).get(&self.header_name) {
None => Err(RouteNonMatch::new(StatusCode::NOT_FOUND)),
Some(hv) => if self.header_value == hv.as_bytes() {
Ok(())
} else {
Err(RouteNonMatch::new(StatusCode::NOT_FOUND))
},
}
}
}