use crate::{Cell, RefMut};
#[derive(Debug)]
pub struct Entry<'a, K, V> {
inner: Inner<'a, K, V>,
}
pub type Inner<'a, K, V> = std::collections::hash_map::Entry<'a, K, Cell<V>>;
impl<'a, K, V> Entry<'a, K, V> {
pub fn new(inner: Inner<'a, K, V>) -> Self {
Self { inner }
}
pub fn or_insert(self, v: V) -> RefMut<'a, V> {
self.or_insert_with(move || v)
}
pub fn or_insert_with<F>(self, f: F) -> RefMut<'a, V>
where
F: FnOnce() -> V,
{
let inner = self.inner.or_insert_with(move || Cell::new(f()));
let inner = inner.borrow_mut();
RefMut::new(inner)
}
}