summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..9ad772d
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,48 @@
+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<B>(req: Request<B>, next: Next<B>) -> 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();
+
+}