[−][src]Trait wasmi::Externals
Trait that allows to implement host functions.
Examples
use wasmi::{ Externals, RuntimeValue, RuntimeArgs, Error, ModuleImportResolver, FuncRef, ValueType, Signature, FuncInstance, Trap, }; struct HostExternals { counter: usize, } const ADD_FUNC_INDEX: usize = 0; impl Externals for HostExternals { fn invoke_index( &mut self, index: usize, args: RuntimeArgs, ) -> Result<Option<RuntimeValue>, Trap> { match index { ADD_FUNC_INDEX => { let a: u32 = args.nth_checked(0)?; let b: u32 = args.nth_checked(1)?; let result = a + b; Ok(Some(RuntimeValue::I32(result as i32))) } _ => panic!("Unimplemented function at {}", index), } } } impl HostExternals { fn check_signature( &self, index: usize, signature: &Signature ) -> bool { let (params, ret_ty): (&[ValueType], Option<ValueType>) = match index { ADD_FUNC_INDEX => (&[ValueType::I32, ValueType::I32], Some(ValueType::I32)), _ => return false, }; signature.params() == params && signature.return_type() == ret_ty } } impl ModuleImportResolver for HostExternals { fn resolve_func( &self, field_name: &str, signature: &Signature ) -> Result<FuncRef, Error> { let index = match field_name { "add" => ADD_FUNC_INDEX, _ => { return Err(Error::Instantiation( format!("Export {} not found", field_name), )) } }; if !self.check_signature(index, signature) { return Err(Error::Instantiation( format!("Export {} has a bad signature", field_name) )); } Ok(FuncInstance::alloc_host( Signature::new(&[ValueType::I32, ValueType::I32][..], Some(ValueType::I32)), index, )) } }
Required methods
fn invoke_index(
&mut self,
index: usize,
args: RuntimeArgs<'_>
) -> Result<Option<RuntimeValue>, Trap>
&mut self,
index: usize,
args: RuntimeArgs<'_>
) -> Result<Option<RuntimeValue>, Trap>
Perform invoke of a host function by specified index
.
Implementors
impl Externals for NopExternals
[src]
fn invoke_index(
&mut self,
_index: usize,
_args: RuntimeArgs<'_>
) -> Result<Option<RuntimeValue>, Trap>
[src]
&mut self,
_index: usize,
_args: RuntimeArgs<'_>
) -> Result<Option<RuntimeValue>, Trap>