Skip to main content

litellm_rs/config/models/
cache.rs

1//! Cache configuration
2
3use super::*;
4use serde::{Deserialize, Serialize};
5
6/// Cache configuration
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(deny_unknown_fields)]
9pub struct CacheConfig {
10    /// Enable caching
11    #[serde(default)]
12    pub enabled: bool,
13    /// Cache TTL in seconds
14    #[serde(default = "default_cache_ttl")]
15    pub ttl: u64,
16    /// Maximum cache size
17    #[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    /// Merge cache configurations
33    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}