use api::app; use color_eyre::eyre::{self, Context}; use std::env; use tracing::{Level, info}; #[tokio::main] async fn main() -> eyre::Result<()> { tracing_subscriber::fmt().with_max_level(Level::INFO).init(); dotenvy::dotenv().ok(); let db_url = env( "API_DATABASE_URL", "sqlite://../.data/storage.sqlite?mode=rwc", ); let web_push_key = env::var("API_WEBPUSH_PRIVATE_KEY").ok(); let auth_api_base = env("API_AUTH_API_BASE", "http://localhost:3000"); let self_api_base = env("API_SELF_API_BASE", "http://localhost:8080"); let port = env("PORT", "8080"); let app = app(&db_url, false, web_push_key, auth_api_base, self_api_base).await?; info!("Starting server"); let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{port}")) .await .context("failed to bind listener")?; axum::serve(listener, app).await?; Ok(()) } fn env(key: &str, default: &str) -> String { env::var(key).unwrap_or(default.to_string()) }