Skip to content

Instantly share code, notes, and snippets.

@SkylerLipthay
Last active August 29, 2015 14:22
Show Gist options
  • Save SkylerLipthay/14f0064796eac7eefe55 to your computer and use it in GitHub Desktop.
Save SkylerLipthay/14f0064796eac7eefe55 to your computer and use it in GitHub Desktop.
Iron demo
[package]
name = "car_demo"
version = "0.0.1"
[dependencies]
iron = "*"
router = "*"
urlencoded = "*"
extern crate iron;
extern crate router;
extern crate urlencoded;
use iron::mime::Mime;
use iron::prelude::*;
use iron::status;
use router::Router;
use urlencoded::UrlEncodedBody;
static FORM_PAGE: &'static str = r#"
<form action="car" method="POST">
<select name="car">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<input type="submit">
</form>
"#;
fn post_param<'a>(req: &'a mut Request, key: &str) -> Option<&'a String> {
match req.get_ref::<UrlEncodedBody>() {
Ok(ref hashmap) => hashmap.get(key).map_or(None, |vec| vec.first()),
Err(_) => None
}
}
fn main() {
let mut router = Router::new();
router.get("/", root_handler);
router.post("/car", car_handler);
Iron::new(router).http("localhost:3000").unwrap();
fn root_handler(_: &mut Request) -> IronResult<Response> {
let content_type = "text/html".parse::<Mime>().unwrap();
Ok(Response::with((status::Ok, content_type, FORM_PAGE)))
}
fn car_handler(req: &mut Request) -> IronResult<Response> {
let response = format!("Car selected: {:?}!", post_param(req, "car"));
Ok(Response::with((status::Ok, response)))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment