Skip to main content

shared/config/boot/
cache.rs

1use utoipa::ToSchema;
2
3#[derive(Default, Debug, serde::Deserialize)]
4pub struct CacheConfig {
5    pub url: String,
6    pub driver: CacheDriver,
7}
8
9#[derive(
10    Debug, Default, Clone, Copy, serde::Deserialize, serde::Serialize, Eq, PartialEq, ToSchema,
11)]
12pub enum CacheDriver {
13    #[default]
14    MemCached,
15    Redis,
16    InMemory,
17}
18
19impl CacheDriver {
20    pub fn as_str(&self) -> &'static str {
21        match self {
22            CacheDriver::MemCached => "memcached",
23            CacheDriver::Redis => "redis",
24            CacheDriver::InMemory => "in_memory",
25        }
26    }
27    pub fn name(&self) -> &'static str {
28        match self {
29            CacheDriver::MemCached => "MemCached",
30            CacheDriver::Redis => "Redis",
31            CacheDriver::InMemory => "InMemory",
32        }
33    }
34}
35impl std::fmt::Display for CacheDriver {
36    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37        write!(f, "{}", self.as_str())
38    }
39}
40impl TryFrom<String> for CacheDriver {
41    type Error = String;
42
43    fn try_from(s: String) -> Result<Self, Self::Error> {
44        match s.to_lowercase().as_str() {
45            "memcached" => Ok(Self::MemCached),
46            "redis" => Ok(Self::Redis),
47            "in_memory" => Ok(Self::InMemory),
48            other => Err(format!(
49                "{} is not supported database. Use either `memcached`, `redis` or `in_memory`",
50                other
51            )),
52        }
53    }
54}