rustless 0.10.0

Rustless is a REST-like API micro-framework for Rust.
Documentation
use rustless::server::status;
use rustless::{Nesting};

#[test]
fn it_allows_to_create_namespace() {

    let app = app!(|api| {
        api.prefix("api");

        api.namespace("ns1", |ns| edp_stub!(ns));
        api.group("ns2", |ns| edp_stub!(ns));
        api.resource("ns3", |ns| edp_stub!(ns));
        api.resources("ns4", |ns| edp_stub!(ns));
        api.segment("ns5", |ns| edp_stub!(ns));

    });

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns1/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns2/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns3/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns4/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns5/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

}

#[test]
fn it_allows_nested_namespaces() {

    let app = app!(|api| {
        api.prefix("api");

        api.namespace("ns1", |ns1| {
            ns1.group("ns2", |ns2| {
                ns2.resource("ns3", |ns3| {
                    ns3.resources("ns4", |ns4| {
                        ns4.segment("ns5", |ns5| edp_stub!(ns5));
                    })
                })
            })
        })

    });

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns1/ns2/ns3/ns4/ns5/info").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

}

#[test]
fn it_allows_grouping_with_zero_path() {

    let app = app!(|api| {
        api.prefix("api");

        api.namespace("ns1", |ns1| {
            ns1.get("", |edp| {
                edp.handle(|client, _params| {
                    client.text("Some usefull info".to_string())
                })
            });
            ns1.post("", |edp| {
                edp.handle(|client, _params| {
                    client.text("Some usefull info".to_string())
                })
            })
        })

    });

    let response = call_app!(app, Get, "http://127.0.0.1:3000/api/ns1").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let response = call_app!(app, Post, "http://127.0.0.1:3000/api/ns1").ok().unwrap();
    assert_eq!(response.status, status::StatusCode::Ok);

    let err_resp = call_app!(app, Delete, "http://127.0.0.1:3000/api/ns1").err().unwrap();
    assert_eq!(err_resp.response.status, status::StatusCode::NotFound);

}