Rocket/examples/handlebars_templates/src/main.rs

85 lines
2.1 KiB
Rust
Raw Normal View History

#![feature(plugin, decl_macro)]
2016-10-04 00:56:43 +00:00
#![plugin(rocket_codegen)]
extern crate rocket_contrib;
extern crate rocket;
2016-10-04 00:56:43 +00:00
#[macro_use] extern crate serde_derive;
#[cfg(test)] mod tests;
use rocket::Request;
use rocket::response::Redirect;
2017-12-29 04:52:03 +00:00
use rocket_contrib::{Template, handlebars};
use handlebars::{Helper, Handlebars, RenderContext, RenderError, JsonRender};
#[derive(Serialize)]
struct TemplateContext {
name: String,
2018-03-24 15:43:06 +00:00
items: Vec<String>,
title: String,
parent: String,
}
#[get("/")]
fn index() -> Redirect {
Redirect::to("/hello/Unknown")
}
#[get("/hello/<name>")]
2018-03-24 15:43:06 +00:00
fn hello(name: String) -> Template {
let page = "index".to_string();
let title = format!("Rocket Example - {}", page).to_string();
let context = TemplateContext {
name: name,
2017-12-29 04:52:03 +00:00
items: vec!["One".into(), "Two".into(), "Three".into()],
2018-03-24 15:43:06 +00:00
parent: "layout".to_string(),
title: title,
};
2018-03-24 15:43:06 +00:00
Template::render(page, &context)
}
#[get("/about")]
fn about() -> Template {
let page = "about".to_string();
let title = format!("Rocket Example - {}", page).to_string();
let context = TemplateContext {
name: "Unknown".to_string(),
items: vec!["One".into(), "Two".into(), "Three".into()],
parent: "layout".to_string(),
title: title,
};
Template::render(page, &context)
}
#[catch(404)]
fn not_found(req: &Request) -> Template {
let mut map = std::collections::HashMap::new();
map.insert("path", req.uri().as_str());
Template::render("error/404", &map)
}
2017-12-29 04:52:03 +00:00
type HelperResult = Result<(), RenderError>;
fn wow_helper(h: &Helper, _: &Handlebars, rc: &mut RenderContext) -> HelperResult {
if let Some(param) = h.param(0) {
write!(rc.writer, "<b><i>{}</i></b>", param.value().render())?;
}
Ok(())
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
2018-03-24 15:43:06 +00:00
.mount("/", routes![index, hello, about])
2017-12-29 04:52:03 +00:00
.catch(catchers![not_found])
.attach(Template::custom(|engines| {
2017-12-29 04:52:03 +00:00
engines.handlebars.register_helper("wow", Box::new(wow_helper));
}))
}
fn main() {
rocket().launch();
}