use clap::{Parser, ValueEnum}; use serde::Deserialize; use url::Url; #[derive(Debug, Clone, Parser, Deserialize, Default)] pub struct Cache { /// Cache connection string #[arg(long, env = "CACHE_URL", default_value = "redis://localhost:6379")] pub cache_url: Option, #[arg(long, env = "CACHE_POOL_ENABLED", default_value = "true")] pub cache_pooled: Option, #[serde(rename = "type")] #[arg(long, env = "CACHE_TYPE", default_value = "non-clustered")] pub cache_type: Option, #[serde(default = "default_max_conns")] #[serde(rename = "max-connections")] #[arg(long, env = "CACHE_MAX_CONNECTIONS", default_value = "100")] pub cache_max_conn: Option, #[command(flatten)] pub sentinel_config: SentinelConfig, } #[derive(Debug, Deserialize, Clone, ValueEnum)] #[serde(rename_all = "kebab-case")] pub enum RedisVariant { Clustered, NonClustered, Sentinel, } fn default_max_conns() -> Option { Some(100) } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Parser, Default)] pub struct SentinelConfig { #[serde(rename = "sentinel_service_name")] #[arg(long, env = "CACHE_SENTINEL_NAME", default_value = "true")] pub service_name: Option, #[serde(default)] #[arg(long, env = "CACHE_TLS_MODE_SECURE")] pub cache_tls_mode_secure: bool, #[serde(default)] #[arg(long, env = "CACHE_USE_RESP3")] pub cache_use_resp3: bool, }