wasmer/entities/engine/
engine_ref.rs1use crate::entities::store::StoreRef;
2
3use super::Engine;
4
5pub struct EngineRef<'a> {
11 pub(crate) inner: &'a Engine,
13}
14
15impl<'a> EngineRef<'a> {
16 pub fn engine(&self) -> &Engine {
18 self.inner
19 }
20 pub fn new(engine: &'a Engine) -> Self {
22 EngineRef { inner: engine }
23 }
24}
25
26pub trait AsEngineRef {
28 fn as_engine_ref(&self) -> EngineRef<'_>;
30
31 fn maybe_as_store(&self) -> Option<StoreRef<'_>> {
36 None
37 }
38}
39
40impl AsEngineRef for EngineRef<'_> {
41 #[inline]
42 fn as_engine_ref(&self) -> EngineRef<'_> {
43 EngineRef { inner: self.inner }
44 }
45}
46
47impl<P> AsEngineRef for P
48where
49 P: std::ops::Deref,
50 P::Target: AsEngineRef,
51{
52 #[inline]
53 fn as_engine_ref(&self) -> EngineRef<'_> {
54 (**self).as_engine_ref()
55 }
56
57 fn maybe_as_store(&self) -> Option<StoreRef<'_>> {
58 (**self).maybe_as_store()
59 }
60}
61
62impl AsEngineRef for Engine {
63 #[inline]
64 fn as_engine_ref(&self) -> EngineRef<'_> {
65 EngineRef { inner: self }
66 }
67}