@@ -25,38 +25,67 @@ use core::marker::PhantomData;
2525/// allows code to import and use `Env` directly (such as the native
2626/// contract) to call host methods without having to write `VmCaller::none()`
2727/// everywhere.
28- #[ cfg( feature = "wasmi" ) ]
29- pub struct VmCaller < ' a , T > ( pub Option < wasmi:: Caller < ' a , T > > ) ;
30- #[ cfg( feature = "wasmi" ) ]
28+
29+ #[ cfg( any( feature = "wasmi" , feature = "wasmtime" ) ) ]
30+ pub enum VmCaller < ' a , T > {
31+ #[ cfg( feature = "wasmi" ) ]
32+ WasmiCaller ( wasmi:: Caller < ' a , T > ) ,
33+ #[ cfg( feature = "wasmtime" ) ]
34+ WasmtimeCaller ( wasmtime:: Caller < ' a , T > ) ,
35+ NoCaller ,
36+ }
37+ #[ cfg( any( feature = "wasmi" , feature = "wasmtime" ) ) ]
3138impl < ' a , T > VmCaller < ' a , T > {
3239 pub fn none ( ) -> Self {
33- VmCaller ( None )
40+ VmCaller :: NoCaller
3441 }
42+ #[ cfg( feature = "wasmi" ) ]
3543 pub fn try_ref ( & self ) -> Result < & wasmi:: Caller < ' a , T > , Error > {
36- match & self . 0 {
37- Some ( caller) => Ok ( caller) ,
38- None => Err ( Error :: from_type_and_code (
44+ match self {
45+ VmCaller :: WasmiCaller ( caller) => Ok ( caller) ,
46+ _ => Err ( Error :: from_type_and_code (
3947 ScErrorType :: Context ,
4048 ScErrorCode :: InternalError ,
4149 ) ) ,
4250 }
4351 }
52+ #[ cfg( feature = "wasmi" ) ]
4453 pub fn try_mut ( & mut self ) -> Result < & mut wasmi:: Caller < ' a , T > , Error > {
45- match & mut self . 0 {
46- Some ( caller) => Ok ( caller) ,
47- None => Err ( Error :: from_type_and_code (
54+ match self {
55+ VmCaller :: WasmiCaller ( caller) => Ok ( caller) ,
56+ _ => Err ( Error :: from_type_and_code (
57+ ScErrorType :: Context ,
58+ ScErrorCode :: InternalError ,
59+ ) ) ,
60+ }
61+ }
62+ #[ cfg( feature = "wasmtime" ) ]
63+ pub fn try_ref_wasmtime ( & self ) -> Result < & wasmtime:: Caller < ' a , T > , Error > {
64+ match self {
65+ VmCaller :: WasmtimeCaller ( caller) => Ok ( caller) ,
66+ _ => Err ( Error :: from_type_and_code (
67+ ScErrorType :: Context ,
68+ ScErrorCode :: InternalError ,
69+ ) ) ,
70+ }
71+ }
72+ #[ cfg( feature = "wasmtime" ) ]
73+ pub fn try_mut_wasmtime ( & mut self ) -> Result < & mut wasmtime:: Caller < ' a , T > , Error > {
74+ match self {
75+ VmCaller :: WasmtimeCaller ( caller) => Ok ( caller) ,
76+ _ => Err ( Error :: from_type_and_code (
4877 ScErrorType :: Context ,
4978 ScErrorCode :: InternalError ,
5079 ) ) ,
5180 }
5281 }
5382}
5483
55- #[ cfg( not( feature = "wasmi" ) ) ]
84+ #[ cfg( not( any ( feature = "wasmi" , feature = "wasmtime" ) ) ) ]
5685pub struct VmCaller < ' a , T > {
5786 _nothing : PhantomData < & ' a T > ,
5887}
59- #[ cfg( not( feature = "wasmi" ) ) ]
88+ #[ cfg( not( any ( feature = "wasmi" , feature = "wasmtime" ) ) ) ]
6089impl < ' a , T > VmCaller < ' a , T > {
6190 pub fn none ( ) -> Self {
6291 VmCaller {
0 commit comments