usher 0.3.0

Parameterized routing for generic resources in Rust
Documentation
pub mod router {
    use usher::prelude::*;

    #[test]
    fn basic_routing() {
        let mut router: Router<usize> = Router::new(vec![Box::new(StaticParser)]);

        router.insert("/", 0);
        router.insert("/1", 1);
        router.insert("/2", 2);
        router.insert("/3", 3);

        let n0 = router.lookup("/");
        let n1 = router.lookup("/1");
        let n2 = router.lookup("/2");
        let n3 = router.lookup("/3");
        let n4 = router.lookup("/4");

        assert_eq!(n0, Some((&0, vec![])));
        assert_eq!(n1, Some((&1, vec![])));
        assert_eq!(n2, Some((&2, vec![])));
        assert_eq!(n3, Some((&3, vec![])));
        assert_eq!(n4, None);
    }

    #[test]
    fn nested_routing() {
        let mut router: Router<usize> = Router::new(vec![Box::new(StaticParser)]);

        router.insert("/number/1", 1);
        router.insert("/number/2", 2);
        router.insert("/number/3", 3);

        let n1 = router.lookup("/number/1");
        let n2 = router.lookup("/number/2");
        let n3 = router.lookup("/number/3");
        let n4 = router.lookup("/number/4");

        assert_eq!(n1, Some((&1, vec![])));
        assert_eq!(n2, Some((&2, vec![])));
        assert_eq!(n3, Some((&3, vec![])));
        assert_eq!(n4, None);
    }

    #[test]
    fn captured_routing() {
        let mut router: Router<()> =
            Router::new(vec![Box::new(DynamicParser), Box::new(StaticParser)]);

        router.insert("/:id", ());

        let n1 = router.lookup("/1");
        let n2 = router.lookup("/1/1");
        let n3 = router.lookup("/");

        assert_eq!(n1, Some((&(), vec![("id", (1, 2))])));
        assert_eq!(n2, None);
        assert_eq!(n3, None);
    }
}