#![feature(plugin)] #![plugin(rocket_codegen)] extern crate comrak; extern crate glob; extern crate inflector; extern crate rocket; extern crate rocket_contrib; #[macro_use] extern crate serde_derive; #[macro_use] extern crate serde_json; extern crate toml; mod handlers; mod models; use rocket::Rocket; use std::fs::File; use std::io::prelude::*; use std::sync::RwLock; type NoteStore = RwLock>; #[derive(Debug, Deserialize)] struct Config { title: String, } fn rocket(notes_path: Option<&str>) -> Rocket { let mut config_data = String::new(); let mut config_file = File::open("config.toml").expect("Cannot find config file: config.toml"); config_file .read_to_string(&mut config_data) .expect("Cannot read config file: config.toml"); let config: Config = toml::from_str(&config_data).expect("Cannot parse config file: config.toml"); let notes = models::note::Note::load_all(notes_path); rocket::ignite() .manage(RwLock::new(notes)) .manage(config) .mount( "/", routes![handlers::home::index, handlers::static_files::all], ) .mount( "/notes", routes![ handlers::note::index, handlers::note::show_html, handlers::note::show_json, handlers::note::update ], ) .attach(rocket_contrib::Template::fairing()) } fn main() { rocket(None).launch(); }