use std::sync::Mutex;
use crate::Cache;
pub struct SyncCache<K, V, C: Cache<K, V>> {
inner: Mutex<C>,
_marker: std::marker::PhantomData<(K, V)>,
}
impl<K, V, C: Cache<K, V>> SyncCache<K, V, C> {
pub fn new(cache: C) -> Self {
Self {
inner: Mutex::new(cache),
_marker: std::marker::PhantomData,
}
}
pub fn get(&self, key: &K) -> Option<V>
where
V: Clone,
{
self.inner.lock().expect("mutex poisoned").get(key).cloned()
}
pub fn put(&self, key: K, value: V) -> Option<V> {
self.inner.lock().expect("mutex poisoned").put(key, value)
}
pub fn remove(&self, key: &K) -> Option<V> {
self.inner.lock().expect("mutex poisoned").remove(key)
}
pub fn len(&self) -> usize {
self.inner.lock().expect("mutex poisoned").len()
}
pub fn is_empty(&self) -> bool {
self.len() == 0
}
pub fn clear(&self) {
self.inner.lock().expect("mutex poisoned").clear();
}
}