use clap::Parser as _; use dotenvy::dotenv; use tracing_subscriber::EnvFilter; use crate::{ app_state::{App, AppState}, cli::{serve_command, worker_command, Cli, Commands}, settings::Settings, }; mod app_error; mod app_state; mod auth; mod base_pooler; mod base_user_perms; mod bases; mod cli; mod data_layer; mod db_conns; mod middleware; mod pg_acls; mod pg_attributes; mod pg_classes; mod pg_databases; mod pg_roles; mod rel_invitations; mod router; mod routes; mod sessions; mod settings; mod users; mod worker; /// Run CLI #[tokio::main] async fn main() { // Attempt to pre-load .env in case it contains a RUST_LOG variable dotenv().ok(); tracing_subscriber::fmt() .with_env_filter(EnvFilter::from_default_env()) .init(); let settings = Settings::load().unwrap(); let state: AppState = App::from_settings(settings.clone()).await.unwrap().into(); if settings.run_database_migrations == Some(1) { sqlx::migrate!().run(&state.app_db).await.unwrap(); } let cli = Cli::parse(); match &cli.command { Commands::Serve => serve_command(state).await.unwrap(), Commands::Worker(args) => worker_command(args, state).await.unwrap(), } }