/// Seconds to sleep after finising a task pub const SECONDS_TO_SLEEP: u64 = 5; pub const APP_NAME: &str = "catapult"; #[derive(Clone, Debug)] pub struct App { pub api_url: String, pub auth_url: String, pub service_username: String, pub service_passphrase: String, pub twilio_config: textsender_models::config::auxiliary::TwilioConfig, } // TODO: Change this to non-async at some point. // Will require changes in other libraries pub async fn load_app() -> Result { use textsender_models::envy; let auth_url_env = envy::environment::get_env("AUTH_URL").await; let api_url_env = envy::environment::get_env("API_URL").await; let service_username_env = envy::environment::get_env("SERVICE_USERNAME").await; let service_passphrase_env = envy::environment::get_env("SERVICE_PASSPHRASE").await; let envs = vec![ api_url_env, auth_url_env, service_username_env, service_passphrase_env, ]; let check_envs = |vs: &Vec| -> (bool, Option) { for env in vs { if env.value.is_empty() { return (false, Some(format!("Key {} is not provided", env.key))); } } (true, None) }; let (envs_valid, reason) = check_envs(&envs); if envs_valid { match textsender_models::config::auxiliary::load_config().await { Ok(twilio_config) => Ok(App { api_url: envs[0].value.clone(), auth_url: envs[1].value.clone(), service_username: envs[2].value.clone(), service_passphrase: envs[3].value.clone(), twilio_config, }), Err(err) => Err(err), } } else { Err(std::io::Error::other(reason.unwrap())) } }