litellm_rs/config/models/
cache.rs1use super::*;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(deny_unknown_fields)]
9pub struct CacheConfig {
10 #[serde(default)]
12 pub enabled: bool,
13 #[serde(default = "default_cache_ttl")]
15 pub ttl: u64,
16 #[serde(default = "default_cache_max_size")]
18 pub max_size: usize,
19}
20
21impl Default for CacheConfig {
22 fn default() -> Self {
23 Self {
24 enabled: false,
25 ttl: default_cache_ttl(),
26 max_size: default_cache_max_size(),
27 }
28 }
29}
30
31impl CacheConfig {
32 pub fn merge(mut self, other: Self) -> Self {
34 self.enabled = other.enabled;
35 if other.ttl != default_cache_ttl() {
36 self.ttl = other.ttl;
37 }
38 if other.max_size != default_cache_max_size() {
39 self.max_size = other.max_size;
40 }
41 self
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn test_cache_config_default() {
51 let config = CacheConfig::default();
52 assert!(!config.enabled);
53 assert_eq!(config.ttl, 3600);
54 assert_eq!(config.max_size, 1000);
55 }
56
57 #[test]
58 fn test_cache_config_structure() {
59 let config = CacheConfig {
60 enabled: true,
61 ttl: 7200,
62 max_size: 5000,
63 };
64 assert!(config.enabled);
65 assert_eq!(config.ttl, 7200);
66 }
67
68 #[test]
69 fn test_cache_config_serialization() {
70 let config = CacheConfig {
71 enabled: true,
72 ttl: 1800,
73 max_size: 2000,
74 };
75 let json = serde_json::to_value(&config).unwrap();
76 assert_eq!(json["enabled"], true);
77 assert_eq!(json["ttl"], 1800);
78 assert_eq!(json["max_size"], 2000);
79 }
80
81 #[test]
82 fn test_cache_config_deserialization() {
83 let json = r#"{"enabled": true, "ttl": 900, "max_size": 500}"#;
84 let config: CacheConfig = serde_json::from_str(json).unwrap();
85 assert!(config.enabled);
86 assert_eq!(config.ttl, 900);
87 }
88
89 #[test]
90 fn test_cache_config_merge_enabled() {
91 let base = CacheConfig::default();
92 let other = CacheConfig {
93 enabled: true,
94 ttl: 3600,
95 max_size: 1000,
96 };
97 let merged = base.merge(other);
98 assert!(merged.enabled);
99 }
100
101 #[test]
102 fn test_cache_config_merge_ttl() {
103 let base = CacheConfig::default();
104 let other = CacheConfig {
105 enabled: false,
106 ttl: 1800,
107 max_size: 1000,
108 };
109 let merged = base.merge(other);
110 assert_eq!(merged.ttl, 1800);
111 }
112
113 #[test]
114 fn test_cache_config_merge_disable_enabled() {
115 let base = CacheConfig {
116 enabled: true,
117 ..CacheConfig::default()
118 };
119 let other = CacheConfig {
120 enabled: false,
121 ..CacheConfig::default()
122 };
123 let merged = base.merge(other);
124 assert!(!merged.enabled);
125 }
126
127 #[test]
128 fn test_cache_config_clone() {
129 let config = CacheConfig {
130 enabled: true,
131 ttl: 3600,
132 max_size: 2000,
133 };
134 let cloned = config.clone();
135 assert_eq!(config.enabled, cloned.enabled);
136 assert_eq!(config.ttl, cloned.ttl);
137 }
138}