summaryrefslogtreecommitdiff
path: root/src/server.rs
blob: 37c5713442aace65a130c85d026613dcfed29d7e (plain)
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);
}