use std::{cell::RefCell, cmp::Eq, hash::Hash, rc::Rc};
use lru::LruCache;
pub(crate) struct Cache<K, V> {
inner: Rc<RefCell<LruCache<K, V>>>,
}
impl<K: Hash + Eq, V: Clone> Cache<K, V> {
pub(crate) fn new(cap: usize) -> Self {
Self {
inner: Rc::new(RefCell::new(LruCache::new(cap))),
}
}
pub(crate) fn get(&self, key: &K) -> Option<V> {
self.inner
.borrow_mut()
.get(key)
.map(std::clone::Clone::clone)
}
pub(crate) fn put(&self, key: K, value: V) {
self.inner.borrow_mut().put(key, value);
}
}
impl<K, V> Clone for Cache<K, V> {
fn clone(&self) -> Self {
Self {
inner: self.inner.clone(),
}
}
}