mirror of
https://github.com/rwf2/Rocket.git
synced 2024-12-31 23:02:37 +00:00
2465e2f136
In summary, this commit modifies 'Responder' so that: * ..it is no longer 'async'. To accommodate, the 'sized_body' methods in 'Response' and 'ResponseBuilder' are no longer 'async' and accept an optional size directly. If none is supplied, Rocket will attempt to compute the size, by seeking, before writing out the response. The 'Body' type was also changed to differentiate between its sized 'Seek' and chunked body variants. * ..'&Request' gains a lifetime: 'r, and the returned 'Response' is parameterized by a new 'o: 'r. This allows responders to return references from the request or those that live longer.
76 lines
2.1 KiB
Rust
76 lines
2.1 KiB
Rust
#![feature(test)]
|
|
#![feature(proc_macro_hygiene)]
|
|
|
|
#[macro_use] extern crate rocket;
|
|
|
|
use rocket::config::{Environment, Config, LoggingLevel};
|
|
|
|
#[get("/", format = "application/json", rank = 1)]
|
|
fn get() -> &'static str { "json" }
|
|
|
|
#[get("/", format = "text/html", rank = 2)]
|
|
fn get2() -> &'static str { "html" }
|
|
|
|
#[get("/", format = "text/plain", rank = 3)]
|
|
fn get3() -> &'static str { "plain" }
|
|
|
|
#[post("/", format = "application/json")]
|
|
fn post() -> &'static str { "json" }
|
|
|
|
#[post("/", format = "text/html")]
|
|
fn post2() -> &'static str { "html" }
|
|
|
|
#[post("/", format = "text/plain")]
|
|
fn post3() -> &'static str { "plain" }
|
|
|
|
fn rocket() -> rocket::Rocket {
|
|
let config = Config::build(Environment::Production).log_level(LoggingLevel::Off);
|
|
rocket::custom(config.unwrap())
|
|
.mount("/", routes![get, get2, get3])
|
|
.mount("/", routes![post, post2, post3])
|
|
}
|
|
|
|
#[allow(unused_must_use)]
|
|
mod benches {
|
|
extern crate test;
|
|
|
|
use super::rocket;
|
|
use self::test::Bencher;
|
|
use rocket::local::Client;
|
|
use rocket::http::{Accept, ContentType};
|
|
|
|
fn client(_rocket: rocket::Rocket) -> Option<Client> {
|
|
unimplemented!("waiting for sync-client");
|
|
}
|
|
|
|
#[bench]
|
|
fn accept_format(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
let mut requests = vec![];
|
|
requests.push(client.get("/").header(Accept::JSON));
|
|
requests.push(client.get("/").header(Accept::HTML));
|
|
requests.push(client.get("/").header(Accept::Plain));
|
|
|
|
b.iter(|| {
|
|
for request in requests.iter_mut() {
|
|
request.mut_dispatch();
|
|
}
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn content_type_format(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
let mut requests = vec![];
|
|
requests.push(client.post("/").header(ContentType::JSON));
|
|
requests.push(client.post("/").header(ContentType::HTML));
|
|
requests.push(client.post("/").header(ContentType::Plain));
|
|
|
|
b.iter(|| {
|
|
for request in requests.iter_mut() {
|
|
request.mut_dispatch();
|
|
}
|
|
});
|
|
}
|
|
}
|