Files
LibreTunes-DX/src/server/main.rs

40 lines
1.3 KiB
Rust

use dioxus::{fullstack::axum::Router, server::axum::Extension};
use crate::App;
use crate::server::{auth::build_auth_layer, config, database, key_val_store};
use crate::util::error::{Contextualize, Error, Result};
pub fn main() -> Result<std::convert::Infallible> {
if let Err(e) = dotenvy::dotenv() {
tracing::warn!("Error reading .env: {e}");
}
// `Ok(...?)` is because `dioxus::serve` expects an `anyhow::Result`
dioxus::serve(async move || Ok(router_setup().await?));
}
/// Set up the axum Router
async fn router_setup() -> Result<Router> {
tracing::debug!("Loading configuration...");
let config = config::load_config()
.map_err(|e| Error::message_here(e.to_string()))
.err_context("Failed to load config")?;
let db_pool = database::setup(config.database.connection_uri())
.await
.err_context("Failed database setup")?;
let key_val_pool = key_val_store::setup(&config.key_val_store.connection_uri())
.await
.err_context("Failed key-value store setup")?;
let auth_layer = build_auth_layer(db_pool.clone(), key_val_pool);
let router = dioxus::server::router(App)
.layer(Extension(db_pool))
.layer(auth_layer);
tracing::info!("Setup complete, returning Router...");
Ok(router)
}