use std::{process, sync::mpsc::channel}; use models::Environment; mod db; mod error; mod models; mod requests; mod services; use db::{create_connection_pool, run_migrations}; use requests::start_app; use services::{start_emailer_service, UserConfirmationMessage}; use tokio::runtime::Handle; #[tokio::main] async fn main() { let (tx, rx) = channel::(); let env = match Environment::init(tx) { Ok(env) => env, Err(err) => { eprintln!("{err}"); process::exit(1); } }; let pool = create_connection_pool(env.db_connection_uri()).await; if let Err(err) = run_migrations(&pool).await { eprintln!("{err:?}"); process::exit(2); } start_emailer_service(Handle::current(), env.assets_dir(), rx); if let Err(err) = start_app(pool, env).await { eprintln!("{err:?}"); process::exit(3); } }