1use std::time::Duration;
8
9#[derive(Debug, Clone, Default)]
11pub struct CacheStats {
12 pub hits: u64,
13 pub misses: u64,
14 pub evictions: u64,
15}
16
17impl CacheStats {
18 pub fn hit_rate(&self) -> f64 {
19 if self.hits + self.misses == 0 {
20 0.0
21 } else {
22 self.hits as f64 / (self.hits + self.misses) as f64
23 }
24 }
25}
26
27#[derive(Debug, Clone)]
29pub enum InvalidationStrategy {
30 Immediate,
32
33 Delayed(Duration),
35
36 Pattern(String),
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_cache_stats() {
46 let stats = CacheStats {
47 hits: 80,
48 misses: 20,
49 ..Default::default()
50 };
51
52 assert_eq!(stats.hit_rate(), 0.8);
53 }
54}