2017-08-29 03:14:59 +00:00
|
|
|
#![feature(plugin, decl_macro)]
|
2016-10-04 00:56:43 +00:00
|
|
|
#![plugin(rocket_codegen)]
|
2016-09-22 11:12:07 +00:00
|
|
|
|
|
|
|
extern crate rocket_contrib;
|
|
|
|
extern crate rocket;
|
2016-10-04 00:56:43 +00:00
|
|
|
#[macro_use] extern crate serde_derive;
|
2016-09-22 11:12:07 +00:00
|
|
|
|
2017-01-03 11:12:27 +00:00
|
|
|
#[cfg(test)] mod tests;
|
|
|
|
|
|
|
|
use rocket::Request;
|
2016-09-22 11:12:07 +00:00
|
|
|
use rocket::response::Redirect;
|
2017-12-29 04:52:03 +00:00
|
|
|
use rocket_contrib::{Template, handlebars};
|
|
|
|
use handlebars::{Helper, Handlebars, RenderContext, RenderError, JsonRender};
|
2016-09-22 11:12:07 +00:00
|
|
|
|
|
|
|
#[derive(Serialize)]
|
|
|
|
struct TemplateContext {
|
|
|
|
name: String,
|
2018-03-24 15:43:06 +00:00
|
|
|
items: Vec<String>,
|
|
|
|
title: String,
|
|
|
|
parent: String,
|
2016-09-22 11:12:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[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();
|
2016-09-22 11:12:07 +00:00
|
|
|
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,
|
2016-09-22 11:12:07 +00:00
|
|
|
};
|
|
|
|
|
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)
|
2016-09-22 11:12:07 +00:00
|
|
|
}
|
|
|
|
|
2017-09-23 02:04:14 +00:00
|
|
|
#[catch(404)]
|
2016-10-07 03:38:13 +00:00
|
|
|
fn not_found(req: &Request) -> Template {
|
2016-09-22 11:12:07 +00:00
|
|
|
let mut map = std::collections::HashMap::new();
|
|
|
|
map.insert("path", req.uri().as_str());
|
2016-12-24 22:03:56 +00:00
|
|
|
Template::render("error/404", &map)
|
2016-09-22 11:12:07 +00:00
|
|
|
}
|
|
|
|
|
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())?;
|
|
|
|
}
|
|
|
|
|
2017-12-29 03:53:15 +00:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2017-05-19 10:29:08 +00:00
|
|
|
fn rocket() -> rocket::Rocket {
|
2016-10-04 02:48:33 +00:00
|
|
|
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])
|
2017-09-16 05:34:33 +00:00
|
|
|
.attach(Template::custom(|engines| {
|
2017-12-29 04:52:03 +00:00
|
|
|
engines.handlebars.register_helper("wow", Box::new(wow_helper));
|
2017-09-16 05:34:33 +00:00
|
|
|
}))
|
2017-05-19 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
rocket().launch();
|
2016-09-22 11:12:07 +00:00
|
|
|
}
|