use crate::entities::store::StoreRef;
use super::Engine;
pub struct EngineRef<'a> {
pub(crate) inner: &'a Engine,
}
impl<'a> EngineRef<'a> {
pub fn engine(&self) -> &Engine {
self.inner
}
pub fn new(engine: &'a Engine) -> Self {
EngineRef { inner: engine }
}
}
pub trait AsEngineRef {
fn as_engine_ref(&self) -> EngineRef<'_>;
fn maybe_as_store(&self) -> Option<StoreRef<'_>> {
None
}
}
impl AsEngineRef for EngineRef<'_> {
#[inline]
fn as_engine_ref(&self) -> EngineRef<'_> {
EngineRef { inner: self.inner }
}
}
impl<P> AsEngineRef for P
where
P: std::ops::Deref,
P::Target: AsEngineRef,
{
#[inline]
fn as_engine_ref(&self) -> EngineRef<'_> {
(**self).as_engine_ref()
}
fn maybe_as_store(&self) -> Option<StoreRef<'_>> {
(**self).maybe_as_store()
}
}
impl AsEngineRef for Engine {
#[inline]
fn as_engine_ref(&self) -> EngineRef<'_> {
EngineRef { inner: self }
}
}