pub struct Func(/* private fields */);Expand description
A Wasm or host function reference.
Implementations§
source§impl Func
impl Func
sourcepub fn new<T>(
ctx: impl AsContextMut<UserState = T>,
ty: FuncType,
func: impl Fn(Caller<'_, T>, &[Value], &mut [Value]) -> Result<(), Trap> + Send + Sync + 'static
) -> Self
pub fn new<T>( ctx: impl AsContextMut<UserState = T>, ty: FuncType, func: impl Fn(Caller<'_, T>, &[Value], &mut [Value]) -> Result<(), Trap> + Send + Sync + 'static ) -> Self
Creates a new Func with the given arguments.
This is typically used to create a host-defined function to pass as an import to a Wasm module.
ty: the signature that the given closure adheres to, used to indicate what the inputs and outputs are.func: the native code invoked whenever this Func will be called. The closure is provided aCalleras its first argument which allows it to query information about theInstancethat is assocaited to the call.
Note
- The given
FuncTypetymust match the parameters and results otherwise the resulting hostFuncmight trap during execution. - It is the responsibility of the caller of
Func::newto guarantee that the correct amount and types of results are written into the results buffer from thefuncclosure. If an incorrect amount of results or types of results is written into the buffer then the remaining computation may fail in unexpected ways. This footgun can be avoided by using the typedFunc::wrapmethod instead. - Prefer using
Func::wrapover this method if possible sinceFuncinstances created using this constructor have runtime overhead for every invokation that can be avoided by usingFunc::wrap.
sourcepub fn wrap<T, Params, Results>(
ctx: impl AsContextMut<UserState = T>,
func: impl IntoFunc<T, Params, Results>
) -> Self
pub fn wrap<T, Params, Results>( ctx: impl AsContextMut<UserState = T>, func: impl IntoFunc<T, Params, Results> ) -> Self
Creates a new host function from the given closure.
sourcepub fn call<T>(
&self,
ctx: impl AsContextMut<UserState = T>,
inputs: &[Value],
outputs: &mut [Value]
) -> Result<(), Error>
pub fn call<T>( &self, ctx: impl AsContextMut<UserState = T>, inputs: &[Value], outputs: &mut [Value] ) -> Result<(), Error>
Calls the Wasm or host function with the given inputs.
The result is written back into the outputs buffer.
Errors
- If the function returned a
Trap. - If the types of the
inputsdo not match the expected types for the function signature ofself. - If the number of input values does not match the expected number of
inputs required by the function signature of
self. - If the number of output values does not match the expected number of
outputs required by the function signature of
self.
sourcepub fn call_resumable<T>(
&self,
ctx: impl AsContextMut<UserState = T>,
inputs: &[Value],
outputs: &mut [Value]
) -> Result<ResumableCall, Error>
pub fn call_resumable<T>( &self, ctx: impl AsContextMut<UserState = T>, inputs: &[Value], outputs: &mut [Value] ) -> Result<ResumableCall, Error>
Calls the Wasm or host function with the given inputs.
The result is written back into the outputs buffer.
Returns a resumable handle to the function invocation upon enountering host errors with which it is possible to handle the error and continue the execution as if no error occured.
Note
This is a non-standard WebAssembly API and might not be available
at other WebAssembly engines. Please be aware that depending on this
feature might mean a lock-in to wasmi for users.
Errors
- If the function returned a Wasm
Trap. - If the types of the
inputsdo not match the expected types for the function signature ofself. - If the number of input values does not match the expected number of
inputs required by the function signature of
self. - If the number of output values does not match the expected number of
outputs required by the function signature of
self.
sourcepub fn typed<Params, Results>(
&self,
ctx: impl AsContext
) -> Result<TypedFunc<Params, Results>, Error>where
Params: WasmParams,
Results: WasmResults,
pub fn typed<Params, Results>( &self, ctx: impl AsContext ) -> Result<TypedFunc<Params, Results>, Error>where Params: WasmParams, Results: WasmResults,
Creates a new TypedFunc from this Func.
Note
This performs static type checks given Params as parameter types
to Func and Results as result types of Func so that those
type checks can be avoided when calling the created TypedFunc.
Errors
If the function signature of self does not match Params and Results
as parameter types and result types respectively.
Trait Implementations§
impl Copy for Func
Auto Trait Implementations§
impl RefUnwindSafe for Func
impl Send for Func
impl Sync for Func
impl Unpin for Func
impl UnwindSafe for Func
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.