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 { 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); }