use clap::Parser as _; use dotenvy::dotenv; use interim_models::MIGRATOR; use tracing_subscriber::EnvFilter; use crate::{ app_state::{App, AppState}, cli::{Cli, Commands, serve_command, worker_command}, settings::Settings, }; mod app_error; mod app_state; mod auth; mod base_pooler; mod base_user_perms; mod cli; mod middleware; mod navbar; mod navigator; mod renderable_role_tree; mod router; mod routes; mod sessions; mod settings; mod user; 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 != 0 { MIGRATOR.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(), } }