Gotham Header Route Matcher

Crate: gothamheaderroutematcher

The gotham_header_routematcher crate provides a RouteMatcher implementation for Gotham that allows you to match on arbitrary header values.

```rust use gotham::router::builder::{buildsimplerouter, DefineSingleRoute, DrawRoutes}; use gotham::router::Router; use gotham::state::State; use gotham::test::TestServer; use hyper::StatusCode; use hyper::header::HeaderValue;

use crate::HeaderEqualsRouteMatcher;

fn hostahandler(state: State) -> (State, &'static str) { (state, "hostahandler") }

fn hostbhandler(state: State) -> (State, &'static str) { (state, "hostbhandler") }

fn createhostrouter() -> Router { buildsimplerouter(|route| { let hosta = HeaderEqualsRouteMatcher::new("host".tostring(), b"a".tovec()); let hostb = HeaderEqualsRouteMatcher::new("host".tostring(), b"b".tovec()); route.get("/").addroutematcher(hosta).to(hostahandler); route.get("/").addroutematcher(hostb).to(hostbhandler); }) }

fn checkroutes() { let testserver = TestServer::new(createhostrouter()).unwrap(); let testclient = testserver.client();

let test_a = test_client.get("http://localhost/")
    .with_header("host", HeaderValue::from_static("a"))
    .perform()
    .unwrap();
assert_eq!(test_a.status(), StatusCode::OK);

let test_a_body = test_a.read_utf8_body().unwrap();
assert_eq!(test_a_body, "host_a_handler");

let test_b = test_client.get("http://localhost/")
    .with_header("host", HeaderValue::from_static("b"))
    .perform()
    .unwrap();
assert_eq!(test_b.status(), StatusCode::OK);

let test_b_body = test_b.read_utf8_body().unwrap();
assert_eq!(test_b_body, "host_b_handler");

let test_c = test_client.get("http://localhost/")
    .with_header("host", HeaderValue::from_static("c"))
    .perform()
    .unwrap();
assert_eq!(test_c.status(), StatusCode::NOT_FOUND);

} ```