pub mod cache; #[cfg(feature = "oauth")] pub mod oauth; use std::path::PathBuf; use clap::Parser; use url::Url; use crate::config::{logging::LogLevel, port::port_in_range}; #[derive(Parser, Debug)] #[command(version, about, long_about = None, name = env!("CARGO_PKG_NAME"))] pub struct Cli { /// Sets the port the server listens on #[arg(short, long, default_value = "2210", env = "PORT", value_parser = port_in_range)] pub port: Option, /// Server's domain #[arg(short, long, default_value = "localhost", env = "DOMAIN")] pub domain: Option, /// Sets a custom config file #[arg(short, long, value_name = "FILE")] pub config: Option, /// Sets the application log level #[arg(short, long, value_enum, env = "LOG_LEVEL", default_value = "debug")] pub log_level: Option, /// Request timeout duration (in seconds) #[arg(short, long, env = "TIMEOUT_SECONDS", default_value = "10")] pub timeout_duration: Option, /// Database connection string #[arg( long, env = "DATABASE_URL", default_value = "postgres://postgres:password@localhost:5432/sellershut" )] pub db: Option, #[command(flatten)] pub cache: Option, /// Server's system name #[arg(short, long, default_value = "sellershut", env = "SYSTEM_NAME")] pub system_name: Option, /// Server's system name #[arg(short, long, default_value = "prod", env = "SYSTEM_NAME")] pub environment: Option, /// Oauth optionas #[command(flatten)] #[cfg(feature = "oauth")] pub oauth: oauth::OAuth, } #[cfg(test)] impl Default for Cli { fn default() -> Self { let url = Url::parse("postgres://postgres:password@localhost:5432/sellershut").ok(); Self { port: Default::default(), config: Default::default(), log_level: Default::default(), timeout_duration: Some(10), domain: Default::default(), system_name: Default::default(), environment: Default::default(), oauth: Default::default(), cache: Default::default(), db: url, } } } #[cfg(test)] mod tests { use super::*; #[test] fn verify_cli() { use clap::CommandFactory; Cli::command().debug_assert(); } }