use clap::Parser; /// GeneIT backend API #[derive(Parser, Debug, Clone)] #[clap(author, version, about, long_about = None)] pub struct AppConfig { /// Listen address #[clap(short, long, env, default_value = "0.0.0.0:8000")] pub listen_address: String, /// Website origin #[clap(short, long, env, default_value = "http://localhost:3000")] pub website_origin: String, /// Proxy IP, might end with a star "*" #[clap(short, long, env)] pub proxy_ip: Option, /// PostgreSQL database host #[clap(long, env, default_value = "localhost")] db_host: String, /// PostgreSQL database port #[clap(long, env, default_value_t = 5432)] db_port: u16, /// PostgreSQL username #[clap(long, env, default_value = "user")] db_username: String, /// PostgreSQL password #[clap(long, env, default_value = "pass")] db_password: String, /// PostgreSQL database name #[clap(long, env, default_value = "geneit")] db_name: String, /// Redis connection hostname #[clap(long, env, default_value = "localhost")] redis_hostname: String, /// Redis connection port #[clap(long, env, default_value_t = 6379)] redis_port: u16, /// Redis database number #[clap(long, env, default_value_t = 0)] redis_db_number: i64, /// Redis username #[clap(long, env)] redis_username: Option, /// Redis password #[clap(long, env, default_value = "secretredis")] redis_password: String, } lazy_static::lazy_static! { static ref ARGS: AppConfig = { AppConfig::parse() }; } impl AppConfig { /// Get parsed command line arguments pub fn get() -> &'static AppConfig { &ARGS } /// Get full db connection chain pub fn db_connection_chain(&self) -> String { format!( "postgres://{}:{}@{}:{}/{}", self.db_username, self.db_password, self.db_host, self.db_port, self.db_name ) } /// Get Redis connection configuration pub fn redis_connection_config(&self) -> redis::ConnectionInfo { redis::ConnectionInfo { addr: redis::ConnectionAddr::Tcp(self.redis_hostname.clone(), self.redis_port), redis: redis::RedisConnectionInfo { db: self.redis_db_number, username: self.redis_username.clone(), password: Some(self.redis_password.clone()), }, } } }