rustium 0.1.4

A Rust application framework that values concurrency, performance, and scalability
Documentation
pub mod api;
pub mod auth;
pub mod database;
pub mod logger;
pub mod rabbit;
pub mod redis;
pub mod server;

use config::{Config, ConfigError, Environment, File};
use serde::Deserialize;
use std::env;

use crate::settings::{
    api::ApiSettings, auth::AuthSettings, database::DatabaseSettings, logger::LoggerSettings,
    rabbit::RabbitSettings, redis::RedisSettings, server::ServerSettings,
};

#[derive(Debug, Clone, Deserialize)]
pub struct RustiumSettings {
    pub environment: String,
    pub api: ApiSettings,
    pub server: ServerSettings,
    pub logger: LoggerSettings,
    pub database: DatabaseSettings,
    pub auth: AuthSettings,
    pub redis: RedisSettings,
    pub rabbit: RabbitSettings,
}

impl RustiumSettings {
    pub fn new(config_fille_path: &str) -> Result<Self, ConfigError> {
        let run_mode = env::var("RUSTIUM_ENV").unwrap_or_else(|_| "development".into());

        let builder = Config::builder()
            .add_source(File::with_name(&format!("{config_fille_path}/{run_mode}")))
            .add_source(Environment::default().separator("__"));

        builder.build()?.try_deserialize()
    }
}