Skip to main content

oximedia_proxy/cache/
strategy.rs

1//! Cache eviction strategies.
2
3/// Cache eviction strategy.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum CacheStrategy {
6    /// Least Recently Used - evict least recently accessed items.
7    Lru,
8
9    /// Least Frequently Used - evict least frequently accessed items.
10    Lfu,
11
12    /// First In First Out - evict oldest items.
13    Fifo,
14}
15
16impl CacheStrategy {
17    /// Get the name of this strategy.
18    #[must_use]
19    pub const fn name(&self) -> &'static str {
20        match self {
21            Self::Lru => "LRU",
22            Self::Lfu => "LFU",
23            Self::Fifo => "FIFO",
24        }
25    }
26}
27
28impl Default for CacheStrategy {
29    fn default() -> Self {
30        Self::Lru
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn test_cache_strategy() {
40        assert_eq!(CacheStrategy::Lru.name(), "LRU");
41        assert_eq!(CacheStrategy::Lfu.name(), "LFU");
42        assert_eq!(CacheStrategy::Fifo.name(), "FIFO");
43    }
44
45    #[test]
46    fn test_default_strategy() {
47        assert_eq!(CacheStrategy::default(), CacheStrategy::Lru);
48    }
49}