use std::path::{Path, PathBuf}; use clap::Parser; /// Solar system central backend #[derive(Parser, Debug)] #[command(version, about, long_about = None)] pub struct AppConfig { /// The port the server will listen to (using HTTPS) #[arg(short, long, env, default_value = "0.0.0.0:8443")] listen_address: String, /// Server storage path #[arg(short, long, env, default_value = "storage")] storage: 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 storage path pub fn storage_path(&self) -> PathBuf { Path::new(&self.storage).to_path_buf() } /// Get PKI storage path pub fn pki_path(&self) -> PathBuf { self.storage_path().join("pki") } /// Get PKI root CA cert path pub fn root_ca_cert_path(&self) -> PathBuf { self.pki_path().join("root_ca.pem") } /// Get PKI root CA private key path pub fn root_ca_priv_key_path(&self) -> PathBuf { self.pki_path().join("root_ca.key") } } #[cfg(test)] mod test { use crate::app_config::AppConfig; #[test] fn verify_cli() { use clap::CommandFactory; AppConfig::command().debug_assert() } }