rustful 0.9.0

A light HTTP framework, with some REST-like features and the ambition of being simple, modular and non-intrusive.
use std::collections::hash_map::{HashMap, Entry};

use router::{Router, Endpoint, InsertState, RouteState};
use context::hypermedia::Link;
use handler::Factory;
use Method;

///A router that selects an item from an inner router or a default item.
#[derive(Clone)]
pub struct OrElse<R, H> {
    router: R,
    default: H,
}

impl<R, H> OrElse<R, H> {
    pub fn new(inner: R, default: H) -> OrElse<R, H> {
        OrElse {
            router: inner,
            default: default,
        }
    }
}

impl<Inner: Router<Handler=H>, H: Factory> Router for OrElse<Inner, H> {
    type Handler = Inner::Handler;

    fn find<'a>(&'a self, method: &Method, route: &mut RouteState) -> Endpoint<'a, H> {
        let mut endpoint = self.router.find(method, route);
        endpoint.handler = endpoint.handler.or(Some(&self.default));
        endpoint
    }

    fn hyperlinks<'a>(&'a self, base: Link<'a>) -> Vec<Link<'a>> {
        self.router.hyperlinks(base)
    }

    fn build<'a, R: Into<InsertState<'a, I>>, I: Iterator<Item = &'a [u8]>>(method: Method, route: R, item: H) -> OrElse<Inner, H> {
        unimplemented!()
    }

    fn insert<'a, R: Into<InsertState<'a, I>>, I: Iterator<Item = &'a [u8]>>(&mut self, method: Method, route: R, item: H) {
        self.router.insert(method, route, item)
    }

    fn insert_router<'a, R: Into<InsertState<'a, I>>, I: Clone + Iterator<Item = &'a [u8]>>(&mut self, route: R, router: OrElse<Inner, H>) {
        self.default = router.default;
        self.router.insert_router(route, router.router);
    }

    fn prefix<'a, R: Into<InsertState<'a, I>>, I: Clone + Iterator<Item = &'a [u8]>>(&mut self, route: R) {
        self.router.prefix(rotue)
    }
}

impl<T: Default, H: Default> Default for OrElse<T, H> {
    fn default() -> OrElse<T, H> {
        OrElse {
            router: T::default(),
            default: H::default(),
        }
    }
}