pub mod arc;
pub mod clock;
pub mod fifo;
pub mod lru;
mod lru_list;
pub mod null;
pub mod random;
pub mod sieve;
pub mod slru;
pub mod tinylfu;
#[derive(Debug, Clone)]
pub(crate) enum AccessEvent<K> {
Write(K, u64), }
#[derive(Debug)]
pub enum AdmissionDecision<K> {
Admit,
Reject,
AdmitAndEvict(Vec<K>), }
pub trait CachePolicy<K, V>: Send + Sync {
fn on_access(&self, key: &K, cost: u64);
fn on_admit(&self, key: &K, cost: u64) -> AdmissionDecision<K>;
fn on_remove(&self, key: &K);
fn evict(&self, cost_to_free: u64) -> (Vec<K>, u64);
fn clear(&self);
}