@@ -26,38 +26,67 @@ use core::marker::PhantomData;
2626/// allows code to import and use `Env` directly (such as the native
2727/// contract) to call host methods without having to write `VmCaller::none()`
2828/// everywhere.
29- #[ cfg( feature = "wasmi" ) ]
30- pub struct VmCaller < ' a , T > ( pub Option < wasmi:: Caller < ' a , T > > ) ;
31- #[ cfg( feature = "wasmi" ) ]
29+
30+ #[ cfg( any( feature = "wasmi" , feature = "wasmtime" ) ) ]
31+ pub enum VmCaller < ' a , T > {
32+ #[ cfg( feature = "wasmi" ) ]
33+ WasmiCaller ( wasmi:: Caller < ' a , T > ) ,
34+ #[ cfg( feature = "wasmtime" ) ]
35+ WasmtimeCaller ( wasmtime:: Caller < ' a , T > ) ,
36+ NoCaller ,
37+ }
38+ #[ cfg( any( feature = "wasmi" , feature = "wasmtime" ) ) ]
3239impl < ' a , T > VmCaller < ' a , T > {
3340 pub fn none ( ) -> Self {
34- VmCaller ( None )
41+ VmCaller :: NoCaller
3542 }
43+ #[ cfg( feature = "wasmi" ) ]
3644 pub fn try_ref ( & self ) -> Result < & wasmi:: Caller < ' a , T > , Error > {
37- match & self . 0 {
38- Some ( caller) => Ok ( caller) ,
39- None => Err ( Error :: from_type_and_code (
45+ match self {
46+ VmCaller :: WasmiCaller ( caller) => Ok ( caller) ,
47+ _ => Err ( Error :: from_type_and_code (
4048 ScErrorType :: Context ,
4149 ScErrorCode :: InternalError ,
4250 ) ) ,
4351 }
4452 }
53+ #[ cfg( feature = "wasmi" ) ]
4554 pub fn try_mut ( & mut self ) -> Result < & mut wasmi:: Caller < ' a , T > , Error > {
46- match & mut self . 0 {
47- Some ( caller) => Ok ( caller) ,
48- None => Err ( Error :: from_type_and_code (
55+ match self {
56+ VmCaller :: WasmiCaller ( caller) => Ok ( caller) ,
57+ _ => Err ( Error :: from_type_and_code (
58+ ScErrorType :: Context ,
59+ ScErrorCode :: InternalError ,
60+ ) ) ,
61+ }
62+ }
63+ #[ cfg( feature = "wasmtime" ) ]
64+ pub fn try_ref_wasmtime ( & self ) -> Result < & wasmtime:: Caller < ' a , T > , Error > {
65+ match self {
66+ VmCaller :: WasmtimeCaller ( caller) => Ok ( caller) ,
67+ _ => Err ( Error :: from_type_and_code (
68+ ScErrorType :: Context ,
69+ ScErrorCode :: InternalError ,
70+ ) ) ,
71+ }
72+ }
73+ #[ cfg( feature = "wasmtime" ) ]
74+ pub fn try_mut_wasmtime ( & mut self ) -> Result < & mut wasmtime:: Caller < ' a , T > , Error > {
75+ match self {
76+ VmCaller :: WasmtimeCaller ( caller) => Ok ( caller) ,
77+ _ => Err ( Error :: from_type_and_code (
4978 ScErrorType :: Context ,
5079 ScErrorCode :: InternalError ,
5180 ) ) ,
5281 }
5382 }
5483}
5584
56- #[ cfg( not( feature = "wasmi" ) ) ]
85+ #[ cfg( not( any ( feature = "wasmi" , feature = "wasmtime" ) ) ) ]
5786pub struct VmCaller < ' a , T > {
5887 _nothing : PhantomData < & ' a T > ,
5988}
60- #[ cfg( not( feature = "wasmi" ) ) ]
89+ #[ cfg( not( any ( feature = "wasmi" , feature = "wasmtime" ) ) ) ]
6190impl < ' a , T > VmCaller < ' a , T > {
6291 pub fn none ( ) -> Self {
6392 VmCaller {
0 commit comments