Overview

The wasmedge-sys crate defines a group of low-level Rust APIs for WasmEdge, a light-weight, high-performance, and extensible WebAssembly runtime for cloud-native, edge, and decentralized applications.

For developers, it is recommended that the APIs in wasmedge-sys are used to construct high-level libraries, while wasmedge-sdk is for building up business applications.

Notice that WasmEdge Rust SDK uses nightly version of Rust. It's strongly recommended to use the latest nightly version of Rust.

Versioning Table

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

| wasmedge-sdk | WasmEdge lib | wasmedge-sys | wasmedge-types| | :-----------: | :-----------: | :-----------: | :-----------: | | 0.2.0 | 0.10.1 | 0.8 | 0.2 | | 0.1.0 | 0.10.0 | 0.7 | 0.1 |

Build

To use or build the wasmedge-sys crate, the WasmEdge library is required.

Example

A quick-start example below is using wasmedge-sys to run a WebAssembly module written with its WAT format (textual format):

```rust use wasmedgesys::{Vm, WasmValue}; use wasmedgetypes::wat2wasm;

[cfg_attr(test, test)]

fn main() -> Result<(), Box> { // read the wasm bytes let wasmbytes = wat2wasm( br#" (module (export "fib" (func $fib)) (func $fib (param $n i32) (result i32) (if (i32.lts (getlocal $n) (i32.const 2) ) (return (i32.const 1) ) ) (return (i32.add (call $fib (i32.sub (getlocal $n) (i32.const 2) ) ) (call $fib (i32.sub (get_local $n) (i32.const 1) ) ) ) ) ) ) "#, )?;

// create a Vm instance
let mut vm = Vm::create(None, None)?;

// register the wasm bytes
let module_name = "extern-module";
vm.register_wasm_from_buffer(module_name, &wasm_bytes)?;

// run the exported function named "fib"
let func_name = "fib";
let result = vm.run_registered_function(module_name, func_name, [WasmValue::from_i32(5)])?;

assert_eq!(result.len(), 1);
assert_eq!(result[0].to_i32(), 8);

Ok(())

} ```

See also