Crate wasmedge_sdk

source ·
Expand description

Overview

The wasmedge-sdk crate defines a group of high-level Rust APIs, which are used to build up business applications.

  • Notice that wasmedge-sdk requires Rust v1.66 or above in the stable channel.

Build

To use or build the wasmedge-sdk crate, the WasmEdge library is required. Please refer to WasmEdge Installation and Uninstallation to install the WasmEdge library.

  • The following table provides the versioning information about each crate of WasmEdge Rust bindings.

    wasmedge-sdkWasmEdge libwasmedge-syswasmedge-typeswasmedge-macro
    0.8.10.12.10.13.10.4.10.3.0
    0.8.00.12.00.13.00.4.10.3.0
    0.7.10.11.20.12.20.3.10.3.0
    0.7.00.11.20.120.3.10.3.0
    0.6.00.11.20.110.3.00.2.0
    0.5.00.11.10.100.3.00.1.0
    0.4.00.11.00.90.2.1-
    0.3.00.10.10.80.2-
    0.1.00.10.00.70.1-

Example

The example below is using wasmedge-sdk to run a WebAssembly module written with its WAT format (textual format). If you would like more examples, please refer to Examples of WasmEdge RustSDK.

use wasmedge_sdk::{
    error::HostFuncError, host_function, params, wat2wasm, Caller, ImportObjectBuilder, Module,
    VmBuilder, WasmValue,
};
 
// We define a function to act as our "env" "say_hello" function imported in the
// Wasm program above.
#[host_function]
pub fn say_hello(_caller: Caller, _args: Vec<WasmValue>) -> Result<Vec<WasmValue>, HostFuncError> {
    println!("Hello, world!");
 
    Ok(vec![])
}
 
#[cfg_attr(test, test)]
fn main() -> anyhow::Result<()> {
    // create an import module
    let import = ImportObjectBuilder::new()
        .with_func::<(), ()>("say_hello", say_hello)?
        .build("env")?;
 
    let wasm_bytes = wat2wasm(
        br#"
    (module
      ;; First we define a type with no parameters and no results.
      (type $no_args_no_rets_t (func (param) (result)))
     
      ;; Then we declare that we want to import a function named "env" "say_hello" with
      ;; that type signature.
      (import "env" "say_hello" (func $say_hello (type $no_args_no_rets_t)))
     
      ;; Finally we create an entrypoint that calls our imported function.
      (func $run (type $no_args_no_rets_t)
        (call $say_hello))
      ;; And mark it as an exported function named "run".
      (export "run" (func $run)))
    "#,
    )?;
 
    // loads a wasm module from the given in-memory bytes
    let module = Module::from_bytes(None, wasm_bytes)?;
 
    // create an executor
    VmBuilder::new()
        .build()?
        .register_import_module(import)?
        .register_module(Some("extern"), module)?
        .run_func(Some("extern"), "run", params!())?;
 
    Ok(())
}
 

Modules

Defines the structs used to construct configurations.
Defines WasmEdge VmDock and Param types.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge error types.
Defines plugin related structs.
Defines the general types.
Defines wasi module instance types, including WasiInstance, WasiNnInstance, wasi-crypto instances.

Macros

Used to pass arguments to the following methods:

Structs

Represents the calling frame on top of stack.
Defines WasmEdge ahead-of-time(AOT) compiler and the relevant APIs.
The version info of WasmEdge core
Defines WasmEdge Driver functions
Defines an execution environment for both pure WASM and compiled WASM.
Defines the types of the exported instances.
Defines a host function instance.
Defines a reference to a host function.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Struct of WasmEdge FuncType.
Defines a type builder for creating a FuncType instance.
Defines a WebAssembly global variable, which stores a single value of the given GlobalType and a flag indicating whether it is mutable or not.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Struct of WasmEdge GlobalType.
Defines an import object that contains the required import data used when instantiating a module.
Creates a normal or wasi import object.
Defines the types of the imported instances.
Represents an instantiated module.
Manipulates the runtime logger.
Defines a linear memory.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Struct of WasmEdge MemoryType.
Defines compiled in-memory representation of an input WASM binary.
Used to collect statistics of the WasmEdge runtime, such as the count of instructions in execution.
Represents all global state that can be manipulated by WebAssembly programs. A store consists of the runtime representation of all instances of functions, tables, memories, and globals.
Defines a table storing the references to host functions or external objects.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Struct of WasmEdge TableType.
A Vm defines a virtual environment for managing WebAssembly programs.
Constructs a Vm instance.

Enums

Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge AOT compiler optimization level.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge AOT compiler output binary format.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines the type of external WasmEdge instances.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge host module registration enum.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines the mutability property of WasmEdge Global variables.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge reference types.
Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Defines WasmEdge value types.

Traits

The object used as an module instance is required to implement this trait.
The object that is used to perform a host function is required to implement this trait.
Defines the function converting a value of Rust type to the one of Wasm type.
Describes the mapping of Rust type to Wasm type.
Describes the mapping of a tuple of Rust types to Wasm types.

Functions

Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module.

Type Definitions

Parses in-memory bytes as either the WebAssembly Text format, or a binary WebAssembly module The WasmEdge result type.
WebAssembly value type.

Attribute Macros

Declare a native async function that will be used to create an async host function instance.
Declare a native function that will be used to create a host function instance.