gotham_header_routematcher/
lib.rs1use gotham::router::non_match::RouteNonMatch;
2use gotham::router::route::matcher::RouteMatcher;
3use gotham::state::{FromState, State};
4use gotham::hyper::{HeaderMap, StatusCode};
5
6#[cfg(test)]
7mod unittest;
8
9#[derive(Clone)]
11pub struct HeaderEqualsRouteMatcher {
12 header_name: String,
13 header_value: Vec<u8>,
14}
15
16impl HeaderEqualsRouteMatcher {
17 pub fn new(header_name: String, header_value: Vec<u8>) -> Self {
19 HeaderEqualsRouteMatcher {
20 header_name,
21 header_value,
22 }
23 }
24}
25
26impl RouteMatcher for HeaderEqualsRouteMatcher {
27 fn is_match(&self, state: &State) -> Result<(), RouteNonMatch> {
30 match HeaderMap::borrow_from(state).get(&self.header_name) {
31 None => Err(RouteNonMatch::new(StatusCode::NOT_FOUND)),
32 Some(hv) => if self.header_value == hv.as_bytes() {
33 Ok(())
34 } else {
35 Err(RouteNonMatch::new(StatusCode::NOT_FOUND))
36 },
37 }
38 }
39}