1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
use iron::headers::{ContentType};
use iron::modifiers::{Header};
use iron::{Iron, Chain, Request, Response, IronResult, status};
use handlebars_iron::{HandlebarsEngine, MemorySource, Template};
use std::collections::BTreeMap;
use data;
fn renderer() -> HandlebarsEngine {
let mut e = HandlebarsEngine::new();
let mut templates = BTreeMap::new();
templates.insert("quotes".to_string(),
include_str!("data/templates/quotes.hbs").to_string());
e.add(Box::new(MemorySource(templates)));
if let Err(r) = e.reload() {
panic!("Error loading templates: {}", r)
}
e
}
fn info(_r: &mut Request) -> IronResult<Response> {
let data = data::make_data();
Ok(Response::with((status::Ok,
Header(ContentType::html()),
Template::new("quotes", data))))
}
pub fn serve(port: u16) {
let router = router!(
info: get "/" => info,
);
let mut chain = Chain::new(router);
chain.link_after(renderer());
let bind_address = format!("{}:{}", "::", port);
let _server = Iron::new(chain).http(bind_address.as_str());
info!("Serving on {}", bind_address);
}
|