Skip to content

Instantly share code, notes, and snippets.

@wddwycc
Last active November 2, 2017 07:48
Show Gist options
  • Save wddwycc/449b116df59cd578bec2ccbc34bf1d98 to your computer and use it in GitHub Desktop.
Save wddwycc/449b116df59cd578bec2ccbc34bf1d98 to your computer and use it in GitHub Desktop.
Iron Cheatsheet

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)))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment