From eb2e86997d47249aa31b703598de13ab2eb96caa Mon Sep 17 00:00:00 2001 From: rtkay123 Date: Tue, 3 Feb 2026 13:45:46 +0200 Subject: feat: add cache --- src/config/cache.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/config/cache.rs (limited to 'src/config/cache.rs') diff --git a/src/config/cache.rs b/src/config/cache.rs new file mode 100644 index 0000000..96f3a9b --- /dev/null +++ b/src/config/cache.rs @@ -0,0 +1,57 @@ +use serde::Deserialize; +use url::Url; + +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "lowercase")] +pub struct CacheConfig { + #[serde(rename = "dsn")] + pub redis_dsn: Url, + #[serde(default)] + pub pooled: bool, + #[serde(rename = "type")] + pub kind: RedisVariant, + #[serde(default = "default_max_conns")] + #[serde(rename = "max-connections")] + pub max_connections: u16, +} + +#[derive(Debug, Deserialize, Clone, Default)] +#[serde(rename_all = "kebab-case")] +pub enum RedisVariant { + Clustered, + #[default] + NonClustered, + Sentinel(SentinelConfig), +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq)] +pub struct SentinelConfig { + #[serde(rename = "sentinel_service_name")] + pub service_name: String, + #[serde(default)] + pub redis_tls_mode_secure: bool, + pub redis_db: Option, + pub redis_username: Option, + pub redis_password: Option, + #[serde(default)] + pub redis_use_resp3: bool, +} + +fn default_max_conns() -> u16 { + 100 +} + +fn default_cache() -> Url { + Url::parse("redis://localhost:6379").expect("valid default DATABASE url") +} + +impl Default for CacheConfig { + fn default() -> Self { + Self { + redis_dsn: default_cache(), + pooled: Default::default(), + kind: Default::default(), + max_connections: default_max_conns(), + } + } +} -- cgit v1.2.3