aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/cli/cache/mod.rs
blob: 04b36bcdf347a26205195e29fa06256fc2502c35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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<Url>,
    #[arg(long, env = "CACHE_POOL_ENABLED", default_value = "true")]
    pub cache_pooled: Option<bool>,
    #[serde(rename = "type")]
    #[arg(long, env = "CACHE_TYPE", default_value = "non-clustered")]
    pub cache_type: Option<RedisVariant>,
    #[serde(default = "default_max_conns")]
    #[serde(rename = "max-connections")]
    #[arg(long, env = "CACHE_MAX_CONNECTIONS", default_value = "100")]
    pub cache_max_conn: Option<u16>,
    #[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<u16> {
    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<String>,
    #[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,
}