aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/cache.rs')
-rw-r--r--src/config/cache.rs57
1 files changed, 57 insertions, 0 deletions
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<i64>,
+ pub redis_username: Option<String>,
+ pub redis_password: Option<String>,
+ #[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(),
+ }
+ }
+}