use axum::{ routing::{get, post}, Router, }; use pulver::{act, CFG}; use sbcom::macros::*; use sbse::fatal; use std::fs; #[tokio::main] async fn main() { let css = match fs::read_to_string(format!("{}/style.css", &CFG.css)) { Ok(x) => x, Err(e) => fatal!("failed to read css stylesheet \"{}\": {e}", CFG.css), }; let app = Router::new() .route("/", get(act::index)) .route( "/style.css", get(([("Content-Type", "text/css")], css.clone())), ) .route("/act/mkthread", post(act::mkthread)) .route("/act/mkpost", post(act::mkpost)) .route("/data/:p", get(act::data)) .route("/:b/:i", get(act::thread)) .route("/:b/", get(act::board)); let addr = format!("{}:{}", CFG.addr, CFG.port); axum::serve( match tokio::net::TcpListener::bind(&addr).await { Ok(x) => { log!("bound to {addr}"); x } Err(e) => fatal!("failed to bind to address {addr}: {e}"), }, app, ) .await .unwrap(); }