Rocket/examples/handlebars_templates/src/main.rs

46 lines
1.0 KiB
Rust
Raw Normal View History

2016-10-04 00:56:43 +00:00
#![feature(plugin, rustc_macro)]
#![plugin(rocket_codegen)]
extern crate rocket_contrib;
extern crate rocket;
extern crate serde_json;
2016-10-04 00:56:43 +00:00
#[macro_use] extern crate serde_derive;
use rocket::{Rocket, Request, Error};
use rocket::response::Redirect;
use rocket_contrib::Template;
#[derive(Serialize)]
struct TemplateContext {
name: String,
items: Vec<String>
}
#[get("/")]
fn index() -> Redirect {
Redirect::to("/hello/Unknown")
}
#[get("/hello/<name>")]
fn get(name: String) -> Template {
let context = TemplateContext {
name: name,
items: vec!["One", "Two", "Three"].iter().map(|s| s.to_string()).collect()
};
2016-09-30 04:41:21 +00:00
Template::render("index", &context)
}
#[error(404)]
fn not_found<'r>(_: Error, req: &'r Request<'r>) -> Template {
let mut map = std::collections::HashMap::new();
map.insert("path", req.uri().as_str());
2016-09-30 04:41:21 +00:00
Template::render("404", &map)
}
fn main() {
let mut rocket = Rocket::new("localhost", 8000);
rocket.catch(errors![not_found]);
rocket.mount_and_launch("/", routes![index, get]);
}