rkt_codegen 0.6.0

Procedural macros for the rkt web framework.
Documentation
#[macro_use]
extern crate rkt;

use rkt::local::blocking::Client;

// Test that manual/auto ranking works as expected.

#[get("/<_number>")]
fn get0(_number: u8) -> &'static str {
    "0"
}

#[get("/<_number>", rank = 1)]
fn get1(_number: u16) -> &'static str {
    "1"
}

#[get("/<_number>", rank = 2)]
fn get2(_number: u32) -> &'static str {
    "2"
}

#[get("/<_number>", rank = 3)]
fn get3(_number: u64) -> &'static str {
    "3"
}

#[test]
fn test_ranking() {
    let rocket = rkt::build().mount("/", routes![get0, get1, get2, get3]);
    let client = Client::debug(rocket).unwrap();

    let response = client.get("/0").dispatch();
    assert_eq!(response.into_string().unwrap(), "0");

    let response = client.get(format!("/{}", 1 << 8)).dispatch();
    assert_eq!(response.into_string().unwrap(), "1");

    let response = client.get(format!("/{}", 1 << 16)).dispatch();
    assert_eq!(response.into_string().unwrap(), "2");

    let response = client.get(format!("/{}", 1u64 << 32)).dispatch();
    assert_eq!(response.into_string().unwrap(), "3");
}

// Test a collision due to same auto rank.

#[get("/<_n>")]
fn get0b(_n: u8) {}

#[test]
fn test_rank_collision() {
    use rkt::error::ErrorKind;

    let rocket = rkt::build().mount("/", routes![get0, get0b]);
    let client_result = Client::debug(rocket);
    match client_result.as_ref().map_err(|e| e.kind()) {
        Err(ErrorKind::Collisions { .. }) => { /* o.k. */ }
        Ok(_) => panic!("client succeeded unexpectedly"),
        Err(e) => panic!("expected collision, got {}", e),
    }
}