Implement Wasmtime's new API as designed by RFC 11. This is quite a large commit which has had lots of discussion externally, so for more information it's best to read the RFC thread and the PR thread.
35 lines
1.1 KiB
Rust
35 lines
1.1 KiB
Rust
//! Example of instantiating of instantiating a wasm module which uses WASI
|
|
//! imports.
|
|
|
|
// You can execute this example with `cargo run --example wasi`
|
|
|
|
use anyhow::Result;
|
|
use wasmtime::*;
|
|
use wasmtime_wasi::sync::WasiCtxBuilder;
|
|
|
|
fn main() -> Result<()> {
|
|
// Define the WASI functions globally on the `Config`.
|
|
let engine = Engine::default();
|
|
let mut linker = Linker::new(&engine);
|
|
wasmtime_wasi::add_to_linker(&mut linker, |s| s)?;
|
|
|
|
// Create a WASI context and put it in a Store; all instances in the store
|
|
// share this context. `WasiCtxBuilder` provides a number of ways to
|
|
// configure what the target program will have access to.
|
|
let wasi = WasiCtxBuilder::new()
|
|
.inherit_stdio()
|
|
.inherit_args()?
|
|
.build();
|
|
let mut store = Store::new(&engine, wasi);
|
|
|
|
// Instantiate our module with the imports we've created, and run it.
|
|
let module = Module::from_file(&engine, "target/wasm32-wasi/debug/wasi.wasm")?;
|
|
linker.module(&mut store, "", &module)?;
|
|
linker
|
|
.get_default(&mut store, "")?
|
|
.typed::<(), (), _>(&store)?
|
|
.call(&mut store, ())?;
|
|
|
|
Ok(())
|
|
}
|