#![feature(box_syntax)] use std::fs::read_to_string; use crate::frontend::{pages::ContentType, style::CSS_BUNDLE}; use actix_web::{get, web, App, HttpServer, Responder}; use database::Database; use frontend::pages::{home::page_home, node::page_library_node}; use library::Library; pub mod database; pub mod frontend; pub mod library; #[get("/assets/style.css")] async fn assets_style() -> impl Responder { // ContentType("text/css", CSS_BUNDLE) ContentType( "text/css", read_to_string("src/frontend/style/layout.css").unwrap(), ) } pub struct AppState { pub database: Database, pub library: Library, } #[actix_web::main] async fn main() -> std::io::Result<()> { 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 = web::Data::new(AppState { library: Library::open(&lib_path).unwrap(), database: Database::open(&db_path).unwrap(), }); HttpServer::new(move || { App::new() .app_data(state.clone()) .service(page_home) .service(assets_style) .service(page_library_node) }) .bind(("127.0.0.1", 8080))? .run() .await }