fn main() {
inner::main();
}
#[cfg(all(feature = "config", feature = "db-sqlx", feature = "redis"))]
mod inner {
use avantis_utils::config::load_config;
use avantis_utils::config::Environment;
use avantis_utils::db;
use avantis_utils::redis;
use once_cell::sync::Lazy;
static CONFIG: Lazy<ExampleConfig> =
Lazy::new(|| ExampleConfig::load(Environment::Develop).unwrap());
pub(super) fn main() {
std::env::set_var("APP_DB__PASSWORD", "supersecurepassword");
println!("{:#?}", ExampleConfig::load(Environment::Develop));
println!("{:#?}", ExampleConfig::load(Environment::Test));
println!("{:#?}", ExampleConfig::load(Environment::Production));
std::env::set_var("APP_ENVIRONMENT", "develop");
println!(
"{:#?}",
ExampleConfig::load(Environment::from_env().unwrap())
);
setup_db();
std::env::remove_var("APP_DB__PASSWORD");
std::env::remove_var("APP_ENVIRONMENT");
}
fn setup_db() {
println!("{:#?}", *CONFIG);
println!("{:#?}", CONFIG.db);
}
#[derive(Clone, Debug, PartialEq, serde::Deserialize)]
struct ExampleConfig {
log_level: String,
db: db::DatabaseConfig,
redis: redis::RedisConfig,
}
impl ExampleConfig {
fn load(environment: Environment) -> anyhow::Result<Self> {
load_config(environment)
}
}
}
#[cfg(not(all(feature = "config", feature = "db-sqlx", feature = "redis")))]
mod inner {
pub fn main() {
println!("Please pass --features config,db-sqlx,redis to cargo when trying this example.");
}
}