63 lines
1.5 KiB
Rust
63 lines
1.5 KiB
Rust
#![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<Vec<models::note::Note>>;
|
|
|
|
#[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();
|
|
}
|