pub mod policy;
use crate::backend::policy::CachePolicy;
use std::fmt::Debug;
use std::hash::Hash;
#[derive(Debug)]
pub struct CacheBackend<K, V>
where
K: Clone + Eq + Hash + Ord + Debug + Send + 'static,
V: Clone + Debug + Send + 'static,
{
policy: Box<dyn CachePolicy<K = K, V = V>>,
}
impl<K, V> CacheBackend<K, V>
where
K: Clone + Eq + Hash + Ord + Debug + Send + 'static,
V: Clone + Debug + Send + 'static,
{
pub fn new(policy: impl CachePolicy<K = K, V = V>) -> Self {
Self {
policy: Box::new(policy),
}
}
pub fn get(&mut self, k: &K) -> Option<V> {
self.policy.get(k)
}
pub fn peek(&mut self, k: &K) -> Option<V> {
self.policy.peek(k)
}
pub fn put(&mut self, k: K, v: V) -> Option<V> {
self.policy.put(k, v).0
}
pub fn remove(&mut self, k: &K) -> Option<V> {
self.policy.remove(k)
}
}