use std::net::SocketAddr; use axum::{Router, response::Response, http::Request, middleware::{Next, self}}; use tower_cookies::CookieManagerLayer; use types::response::ResponseCode; use crate::api::{pages, auth, users, posts}; mod api; mod database; mod types; async fn serve(req: Request, next: Next) -> Response { let Ok(file) = ResponseCode::Success.file(&req.uri().to_string()).await else { return next.run(req).await }; file } async fn not_found() -> Response { match ResponseCode::NotFound.file("/404.html").await { Ok(file) => file, Err(err) => err } } #[tokio::main] async fn main() { database::init().unwrap(); let app = Router::new() .fallback(not_found) .layer(middleware::from_fn(serve)) .nest("/", pages::router()) .nest("/api/auth", auth::router()) .nest("/api/users", users::router()) .nest("/api/posts", posts::router()) .layer(CookieManagerLayer::new()); let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); println!("Listening on {}", addr); axum::Server::bind(&addr) .serve(app.into_make_service()) .await .unwrap(); }