airlab-web 0.1.3

airlab backend
#![allow(clippy::module_name_repetitions)]
use airlab_lib::envs::{get_env, get_env_parse};
use std::sync::OnceLock;

pub fn web_config() -> &'static WebConfig {
    static INSTANCE: OnceLock<WebConfig> = OnceLock::new();

    INSTANCE.get_or_init(|| {
        WebConfig::load_from_env()
            .unwrap_or_else(|ex| panic!("FATAL - WHILE LOADING CONF - Cause: {ex:?}"))
    })
}

#[allow(non_snake_case)]
#[derive(Debug)]
pub struct WebConfig {
    pub WEB_FOLDER: String,
    pub EMAIL_FROM_ADDRESS: String,
    pub EMAIL_FROM_NAME: String,
    pub EMAIL_TOKEN: String,
    pub EMAIL_ADDRESS: String,
    pub LOG_AGGR_URL: String,
    pub RESET_PWD_URL: String,
    pub DATA_PATH: String,
    pub HOST_ADDR: String,
    pub HOST_PORT: String,
    pub SUPER_USER: String,
    pub SUPER_USER_PWD: String,
    pub SETUP_DEMO_GROUP: bool,
}

impl WebConfig {
    fn load_from_env() -> airlab_lib::envs::Result<Self> {
        Ok(Self {
            HOST_PORT: get_env("SERVICE_HOST_PORT")?,
            HOST_ADDR: get_env("SERVICE_HOST_ADDR")?,
            WEB_FOLDER: get_env("SERVICE_WEB_FOLDER")?,
            EMAIL_FROM_ADDRESS: get_env("SERVICE_EMAIL_FROM_ADDRESS")?,
            EMAIL_FROM_NAME: get_env("SERVICE_EMAIL_FROM_NAME")?,
            EMAIL_TOKEN: get_env("SERVICE_EMAIL_TOKEN")?,
            EMAIL_ADDRESS: get_env("SERVICE_EMAIL_ADDRESS")?,
            LOG_AGGR_URL: get_env("SERVICE_LOG_AGGR_URL")?,
            RESET_PWD_URL: get_env("SERVICE_RESET_PWD_URL")?,
            DATA_PATH: get_env("SERVICE_DATA_PATH")?,
            SUPER_USER: get_env("SUPER_USER")?,
            SUPER_USER_PWD: get_env("SUPER_USER_PWD")?,
            SETUP_DEMO_GROUP: get_env_parse("SETUP_DEMO_GROUP")?,
        })
    }
}