mycelium-http-tools 8.3.1-beta.3

Provide HTTP related elements to the mycelium project.
Documentation
use super::{
    external_providers_config::ExternalProviderConfig,
    internal_auth_config::InternalOauthConfig,
};

use myc_config::{load_config_from_file, optional_config::OptionalConfig};
use mycelium_base::utils::errors::{creation_err, MappedErrors};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;

#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AuthConfig {
    #[serde(default)]
    pub internal: OptionalConfig<InternalOauthConfig>,
    #[serde(default)]
    pub external: OptionalConfig<Vec<ExternalProviderConfig>>,
}

#[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
struct TmpConfig {
    auth: AuthConfig,
}

impl AuthConfig {
    pub fn from_default_config_file(
        file: PathBuf,
    ) -> Result<Self, MappedErrors> {
        if !file.exists() {
            return creation_err(format!(
                "Could not find config file: {}",
                file.to_str().unwrap()
            ))
            .as_error();
        }

        match load_config_from_file::<TmpConfig>(file) {
            Ok(config) => Ok(config.auth),
            Err(err) => Err(err),
        }
    }
}