use env_logger; use handlebars::Handlebars; use handlebars_iron::{DirectorySource, HandlebarsEngine}; use iron::prelude::Iron; use std::error::Error; use std::sync::Arc; use media_collection_crud::{chain, db}; fn template_engine() -> Arc { let views_ext = ".hbs"; let views_path = "./src/views"; let hbs = Handlebars::new(); let mut hbse = HandlebarsEngine::from(hbs); hbse.add(Box::new( DirectorySource::new(views_path, views_ext) )); if let Err(r) = hbse.reload() { panic!("{:?}", r.description()); } let hbse_ref = Arc::new(hbse); if cfg!(debug_assertions) { println!("Templates are being watched."); use handlebars_iron::Watchable; hbse_ref.watch(views_path); } hbse_ref } fn main() { env_logger::init(); db::establish_connection(); let port = 8000; let bind_addr = format!("localhost:{}", port); let mut chain = chain::init(); let templating_engine = template_engine(); chain.link_after(templating_engine); Iron::new(chain) .http(bind_addr.as_str()) .unwrap(); }