Struct wit_component::ComponentEncoder
source · pub struct ComponentEncoder { /* private fields */ }
Expand description
An encoder of components based on wit
interface definitions.
Implementations§
source§impl ComponentEncoder
impl ComponentEncoder
sourcepub fn module(self, module: &[u8]) -> Result<Self>
pub fn module(self, module: &[u8]) -> Result<Self>
Set the core module to encode as a component. This method will also parse any component type information stored in custom sections inside the module, and add them as the interface, imports, and exports. It will also add any producers information inside the component type information to the core module.
sourcepub fn validate(self, validate: bool) -> Self
pub fn validate(self, validate: bool) -> Self
Sets whether or not the encoder will validate its output.
sourcepub fn adapter(self, name: &str, bytes: &[u8]) -> Result<Self>
pub fn adapter(self, name: &str, bytes: &[u8]) -> Result<Self>
Specifies a new adapter which is used to translate from a historical
wasm ABI to the canonical ABI and the interface
provided.
This is primarily used to polyfill, for example,
wasi_snapshot_preview1
with a component-model using interface. The
name
provided is the module name of the adapter that is being
polyfilled, for example "wasi_snapshot_preview1"
.
The bytes
provided is a core wasm module which implements the name
interface in terms of the interface
interface. This core wasm module
is severely restricted in its shape, for example it cannot have any data
segments or element segments.
The interface
provided is the component-model-using-interface that the
wasm module specified by bytes
imports. The bytes
will then import
interface
and export functions to get imported from the module name
in the core wasm that’s being wrapped.
sourcepub fn library(
self,
name: &str,
bytes: &[u8],
library_info: LibraryInfo
) -> Result<Self>
pub fn library( self, name: &str, bytes: &[u8], library_info: LibraryInfo ) -> Result<Self>
Specifies a shared-everything library to link into the component.
Unlike adapters, libraries may have data and/or element segments, but they must operate on an imported memory and table, respectively. In this case, the correct amount of space is presumed to have been statically allocated in the main module’s memory and table at the offsets which the segments target, e.g. as arranged by super::linking::Linker.
Libraries are treated similarly to adapters, except that they are not
“minified” the way adapters are, and instantiation is controlled
declaratively via the library_info
parameter.
sourcepub fn realloc_via_memory_grow(self, value: bool) -> Self
pub fn realloc_via_memory_grow(self, value: bool) -> Self
True if the realloc and stack alloction should use ememory.grow The default is to use the main module realloc Can be useful if cabi_realloc cannot be called before the host runtime is initialised.