use wasmtime::Result;
use wasmtime::{Engine, Linker, Module, Store};
use wasmtime_wasi::WasiCtx;
use wasmtime_wasi::p1::{self, WasiP1Ctx};
#[tokio::main]
async fn main() -> Result<()> {
let engine = Engine::default();
let mut linker: Linker<WasiP1Ctx> = Linker::new(&engine);
p1::add_to_linker_async(&mut linker, |t| t)?;
let wasi_ctx = WasiCtx::builder().inherit_stdio().build_p1();
let mut store = Store::new(&engine, wasi_ctx);
let module = Module::from_file(&engine, "target/wasm32-wasip1/debug/wasi.wasm")?;
let func = linker
.module_async(&mut store, "", &module)
.await?
.get_default(&mut store, "")?
.typed::<(), ()>(&store)?;
func.call_async(&mut store, ()).await?;
Ok(())
}