summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs
index 9ccc45b..31b749e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,9 +1,9 @@
-use std::net::SocketAddr;
+use std::{net::SocketAddr, process::exit};
use axum::{Router, response::Response, http::{Request, StatusCode}, middleware::{Next, self}, extract::ConnectInfo, RequestExt, body::HttpBody, Extension};
use tower_cookies::CookieManagerLayer;
-use tracing::metadata::LevelFilter;
+use tracing::{metadata::LevelFilter, error, info};
use tracing_subscriber::{prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer, filter::filter_fn};
-use types::response::ResponseCode;
+use types::http::ResponseCode;
use crate::{api::{pages, auth, users, posts}, types::extract::RouterURI};
@@ -12,8 +12,11 @@ mod database;
mod types;
mod console;
-async fn serve<B>(req: Request<B>, next: Next<B>) -> Response {
- let file = ResponseCode::Success.file(&req.uri().to_string()).await;
+async fn serve<B>(req: Request<B>, next: Next<B>) -> Response where
+ B: Send + Sync + 'static + HttpBody,
+{
+ let uri = req.uri();
+ let file = ResponseCode::Success.file(&uri.to_string()).await;
if file.status() != StatusCode::OK {
return next.run(req).await;
}
@@ -40,8 +43,6 @@ async fn not_found() -> Response {
#[tokio::main]
async fn main() {
- database::init().unwrap();
-
let fmt_layer = tracing_subscriber::fmt::layer();
tracing_subscriber::registry()
.with(
@@ -51,6 +52,11 @@ async fn main() {
)
.init();
+ if database::init().is_err() {
+ error!("Failed to connect to the sqlite database");
+ exit(1)
+ };
+
let app = Router::new()
.fallback(not_found)
.nest("/", pages::router())
@@ -64,12 +70,16 @@ async fn main() {
.layer(Extension(RouterURI("/api/posts")))
).layer(CookieManagerLayer::new());
- let addr = "[::]:8080".parse::<std::net::SocketAddr>().unwrap();
- tracing::info!("listening on {}", addr);
+ let Ok(addr) = "[::]:8080".parse::<std::net::SocketAddr>() else {
+ error!("Failed to parse port binding");
+ exit(1)
+ };
+
+ info!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service_with_connect_info::<SocketAddr>())
.await
- .unwrap();
+ .unwrap_or(());
}