Files
warren/backend/src/server.rs

49 lines
1.3 KiB
Rust

use std::env;
use axum::http::HeaderValue;
use sqlx::{Pool, Postgres};
use tokio::net::TcpListener;
use tower_http::{
cors::{self, CorsLayer},
services::ServeDir,
};
use crate::{
Result,
api::{self, AppState},
};
pub type Router = axum::Router<AppState>;
pub(super) async fn start(pool: Pool<Postgres>) -> Result<()> {
let cors_origin = env::var("CORS_ALLOW_ORIGIN").unwrap_or("*".to_string());
let serve_dir = std::env::var("SERVE_DIRECTORY")?;
let mut app = Router::new()
.nest("/api", api::router())
.layer(
CorsLayer::new().allow_origin(cors::AllowOrigin::exact(HeaderValue::from_str(
&cors_origin,
)?)),
)
.with_state(AppState::new(pool, serve_dir));
if !cfg!(debug_assertions) {
let frontend_path = env::var("STATIC_FRONTEND_DIR").unwrap_or("./frontend".to_string());
let frontend_service = ServeDir::new(frontend_path);
log::debug!("Registering static frontend");
app = app.fallback_service(frontend_service);
}
let addr = env::var("BIND_ADDRESS").unwrap_or("127.0.0.1:8080".to_string());
let listener = TcpListener::bind(&addr).await?;
log::info!("Listening on {}", addr);
axum::serve(listener, app).await?;
Ok(())
}