pub struct Instance { /* private fields */ }Expand description
An instantiated WebAssembly module.
This type represents the instantiation of a Module. Once instantiated
you can access the exports which are of type
Extern and provide the ability to call functions, set globals, read
memory, etc. This is where all the fun stuff happens!
An Instance is created from two inputs, a Module and a list of
imports, provided as a list of Extern values. The Module is the wasm
code that was compiled and we’re instantiating, and the Extern imports
are how we’re satisfying the imports of the module provided. On successful
instantiation an Instance will automatically invoke the wasm start
function.
When interacting with any wasm code you’ll want to make an Instance to
call any code or execute anything!
Implementations§
Source§impl Instance
impl Instance
Sourcepub fn new(
store: &Store,
module: &Module,
imports: &[Extern],
) -> Result<Instance, Error>
pub fn new( store: &Store, module: &Module, imports: &[Extern], ) -> Result<Instance, Error>
Creates a new Instance from the previously compiled Module and
list of imports specified.
This method instantiates the module provided with the imports,
following the procedure in the core specification to
instantiate. Instantiation can fail for a number of reasons (many
specified below), but if successful the start function will be
automatically run (if provided) and then the Instance will be
returned.
Per the WebAssembly spec, instantiation includes running the module’s
start function, if it has one (not to be confused with the _start
function, which is not run).
Note that this is a low-level function that just performance an
instantiation. See the Linker struct for an API which provides a
convenient way to link imports and provides automatic Command and Reactor
behavior.
§Providing Imports
The imports array here is a bit tricky. The entries in the list of
imports are intended to correspond 1:1 with the list of imports
returned by Module::imports. Before calling Instance::new you’ll
want to inspect the return value of Module::imports and, for each
import type, create an Extern which corresponds to that type.
These Extern values are all then collected into a list and passed to
this function.
Note that this function is intentionally relatively low level. It is the intention that we’ll soon provide a higher level API which will be much more ergonomic for instantiating modules. If you need the full power of customization of imports, though, this is the method for you!
§Errors
This function can fail for a number of reasons, including, but not limited to:
- The number of
importsprovided doesn’t match the number of imports returned by themodule’sModule::importsmethod. - The type of any
Externdoesn’t match the correspondingExternTypeentry that it maps to. - The
startfunction in the instance, if present, traps. - Module/instance resource limits are exceeded.
When instantiation fails it’s recommended to inspect the return value to
see why it failed, or bubble it upwards. If you’d like to specifically
check for trap errors, you can use error.downcast::<Trap>().
Sourcepub fn exports<'instance>(
&'instance self,
) -> impl ExactSizeIterator<Item = Export<'instance>> + 'instance
pub fn exports<'instance>( &'instance self, ) -> impl ExactSizeIterator<Item = Export<'instance>> + 'instance
Returns the list of exported items from this Instance.
Sourcepub fn get_export(&self, name: &str) -> Option<Extern>
pub fn get_export(&self, name: &str) -> Option<Extern>
Looks up an exported Extern value by name.
This method will search the module for an export named name and return
the value, if found.
Returns None if there was no export named name.
Sourcepub fn get_func(&self, name: &str) -> Option<Func>
pub fn get_func(&self, name: &str) -> Option<Func>
Looks up an exported Func value by name.
Returns None if there was no export named name, or if there was but
it wasn’t a function.
Sourcepub fn get_table(&self, name: &str) -> Option<Table>
pub fn get_table(&self, name: &str) -> Option<Table>
Looks up an exported Table value by name.
Returns None if there was no export named name, or if there was but
it wasn’t a table.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Instance
impl !RefUnwindSafe for Instance
impl !Send for Instance
impl !Sync for Instance
impl Unpin for Instance
impl !UnwindSafe for Instance
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more