Crate a router
extern crate iron;
extern crate router;
use iron::prelude::*;
use iron::status;
use router::Router;
fn main() {
let mut router = Router::new();
router.get("/", home, "home");
fn home(req: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "This is home page")))
}
router.get("/detail", detail, "detail");
fn detail(req: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "This is detail page")))
}
Iron::new(router).http("localhost:3000").unwrap();
}
Create router with macro
extern crate iron;
#[macro_use]
extern crate router;
use iron::prelude::*;
use iron::status;
use router::Router;
fn main() {
fn index(req: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "This is home page")))
}
let router = router!(index: get "/" => index);
Iron::new(router).http("localhost:3000").unwrap();
}
Add paramater to route
fn index(req: &mut Request) -> IronResult<Response> {
println!("{:?}", req.extensions.get::<Router>().unwrap());
Ok(Response::with((status::Ok, "This is home page")))
}
let router = router!(index: get "/" => index,
query: get "/:id" => index);
Add url query to route
extern crate params;
use params::Params;
fn index(req: &mut Request) -> IronResult<Response> {
let map = req.get_ref::<Params>().unwrap();
// ...
}
Parse JSON
extern crate bodyparser;
match req.get::<bodyparser::Json>() {
Ok(Some(json_body)) => println!("Parsed body:\n{:?}", json_body),
Ok(None) => println!("No body"),
Err(err) => println!("Error: {:?}", err)
}
Response with JSON
extern crate serde;
extern crate serde_json as json;
#[macro_use]
extern crate serde_derive;
#[derive(Serialize, Deserialize, Debug)]
struct Greeting {
msg: String,
}
{
let greeting = Greeting { msg: "Hi there".to_string() };
let response = json::to_string(&greeting).unwrap();
Ok(Response::with((status::Ok, response)))
}