zwasm-sdk 0.1.0

A safe and ergonomic Rust binding for the zwasm WebAssembly runtime, supporting Wasm 3.0, WASI, and host function imports.
mod common;

use std::error::Error;

use zwasm_sdk::Module;

fn main() -> Result<(), Box<dyn Error>> {
    let module = Module::new(common::MEMORY_WASM)?;

    println!("memory size: {} bytes", module.memory_size());

    let write_buf = [0xde, 0xad, 0xbe, 0xef];
    module.memory_write(0, &write_buf)?;

    let mut read_buf = [0u8; 4];
    module.memory_read(0, &mut read_buf)?;
    println!("read after write: {read_buf:02x?}");

    module.invoke("f", &[])?;

    let snapshot = module
        .memory_data_copy()
        .ok_or("module does not export linear memory")?;
    let value = u32::from_le_bytes([snapshot[0], snapshot[1], snapshot[2], snapshot[3]]);

    println!("u32 at memory[0..4] after invoke: {value}");
    Ok(())
}