use crate::db::DbConfig;
use crate::env::Environment;
use crate::server::HttpServerConfig;
use anyhow::Result;
use log::{debug, log, Level};
use std::fmt::Debug;
#[derive(Debug, Clone)]
pub struct Config {
pub env: Environment,
pub server: HttpServerConfig,
pub db: DbConfig,
}
impl Config {
pub fn init(default_port: u16) -> Result<Config> {
Self::init_for(default_port, None)
}
pub fn init_for(default_port: u16, environment: Option<Environment>) -> Result<Config> {
debug!("⚙️ Configuring app ...");
let env = match environment {
Some(e) => e,
None => Environment::init()?,
};
let log_level = match env {
Environment::Test => Level::Debug,
_ => Level::Info,
};
log!(log_level, "⚙️ Environment set to {env}");
let db = DbConfig::init_for(&env)?;
let server = HttpServerConfig::init_for("127.0.0.1", default_port)?;
Ok(Config { env, server, db })
}
}
impl ToString for Config {
fn to_string(&self) -> String {
format!(
r#"{}
APP_ENV={}
{}"#,
self.server.to_string(),
self.env,
self.db.to_string(),
)
}
}