1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Deserialize, Serialize)]
5pub struct CacheConfig {
6 #[serde(default = "default_store", alias = "backend")]
8 pub store: String,
9 pub key_prefix: Option<String>,
11 #[serde(default)]
13 pub memory: MemoryConfig,
14}
15
16impl Default for CacheConfig {
17 fn default() -> Self {
18 Self {
19 store: default_store(),
20 key_prefix: None,
21 memory: MemoryConfig::default(),
22 }
23 }
24}
25
26fn default_store() -> String {
27 "memory".to_owned()
28}
29
30#[derive(Debug, Clone, Default, Deserialize, Serialize)]
32pub struct MemoryConfig {
33 pub max_entries: Option<usize>,
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn default_config_has_expected_values() {
43 let cfg = CacheConfig::default();
44 assert_eq!(cfg.store, "memory");
45 assert!(cfg.key_prefix.is_none());
46 assert!(cfg.memory.max_entries.is_none());
47 }
48
49 #[test]
50 fn deserialise_from_json() {
51 let json = r#"{"store":"memory","memory":{"max_entries":2}}"#;
52 let cfg: CacheConfig = serde_json::from_str(json).unwrap();
53 assert_eq!(cfg.store, "memory");
54 assert_eq!(cfg.memory.max_entries, Some(2));
55 }
56
57 #[test]
58 fn deserialise_legacy_backend_field_from_json() {
59 let json = r#"{"backend":"memory","memory":{"max_entries":2}}"#;
60 let cfg: CacheConfig = serde_json::from_str(json).unwrap();
61 assert_eq!(cfg.store, "memory");
62 assert_eq!(cfg.memory.max_entries, Some(2));
63 }
64}