webserver_base/base_settings/
base_settings.rsuse crate::Environment;
use std::env;
#[derive(Clone)]
pub struct BaseSettings {
    pub host: String,
    pub port: u16,
    pub environment: Environment,
    pub project_name: String,
    pub project_description: String,
    pub project_keywords: String,
    pub home_url: String,
    pub analytics_domain: String,
    pub sentry_dsn: String,
}
impl Default for BaseSettings {
    #[must_use]
    fn default() -> Self {
        let environment = env::var("ENVIRONMENT").map_or(Environment::Development, |s| {
            Environment::try_from(s.clone()).unwrap_or_else(|_| {
                panic!("failed to parse `ENVIRONMENT` environment variable: {s}")
            })
        });
        let host = env::var("HOST").unwrap_or_else(|_| {
            if environment == Environment::Development {
                "127.0.0.1".to_string()
            } else {
                "0.0.0.0".to_string()
            }
        });
        let port = env::var("PORT").map_or(8080, |s| {
            s.parse::<u16>()
                .expect("failed to parse `PORT` environment variable")
        });
        let Ok(project_name) = env::var("PROJECT_NAME") else {
            panic!("environment variable `PROJECT_NAME` is not set");
        };
        let Ok(project_description) = env::var("PROJECT_DESCRIPTION") else {
            panic!("environment variable `PROJECT_DESCRIPTION` is not set");
        };
        let Ok(project_keywords) = env::var("PROJECT_KEYWORDS") else {
            panic!("environment variable `PROJECT_KEYWORDS` is not set");
        };
        let Ok(home_url) = env::var("HOME_URL") else {
            panic!("environment variable `HOME_URL` is not set");
        };
        let Ok(analytics_domain) = env::var("ANALYTICS_DOMAIN") else {
            panic!("environment variable `ANALYTICS_DOMAIN` is not set");
        };
        let Ok(sentry_dsn) = env::var("SENTRY_DSN") else {
            panic!("environment variable `SENTRY_DSN` is not set");
        };
        Self {
            host,
            port,
            environment,
            project_name,
            project_description,
            project_keywords,
            home_url,
            analytics_domain,
            sentry_dsn,
        }
    }
}