use std::{any::TypeId, marker::PhantomData};
use crate::{RefMut, Resource};
pub struct Entry<'a, R> {
inner: rt_map::Entry<'a, TypeId, Box<dyn Resource>>,
marker: PhantomData<R>,
}
impl<'a, R> Entry<'a, R>
where
R: Resource,
{
pub fn new(inner: rt_map::Entry<'a, TypeId, Box<dyn Resource>>) -> Self {
Self {
inner,
marker: PhantomData,
}
}
pub fn or_insert(self, v: R) -> RefMut<'a, R> {
self.or_insert_with(move || v)
}
pub fn or_insert_with<F>(self, f: F) -> RefMut<'a, R>
where
F: FnOnce() -> R,
{
let inner = self.inner.or_insert_with(move || Box::new(f()));
RefMut::new(inner)
}
}