#![feature(box_syntax)] use crate::frontend::style::CSS_BUNDLE; use database::Database; use frontend::pages::{home::page_home, node::page_library_node}; use library::Library; use rocket::{get, http::ContentType, launch, routes}; use std::fs::read_to_string; pub mod database; pub mod frontend; pub mod library; #[get("/assets/style.css")] async fn assets_style() -> (ContentType, String) { ( ContentType::CSS, if cfg!(debug_assertions) { read_to_string("server/src/frontend/style/layout.css").unwrap() } else { CSS_BUNDLE.to_string() }, ) } pub struct AppState { pub database: Database, pub library: Library, } #[launch] fn rocket() -> _ { env_logger::init_from_env("LOG"); let db_path = std::env::var("DB_PATH").unwrap_or("data/db".to_string()); let lib_path = std::env::var("LIB_PATH").unwrap_or("data/library".to_string()); let state = AppState { library: Library::open(&lib_path).unwrap(), database: Database::open(&db_path).unwrap(), }; rocket::build() .manage(state) .mount("/", routes![page_home, page_library_node, assets_style]) }