use anyhow::Result;
use wasmtime::{Config, Engine, Linker, Module, Store};
use wasmtime_wasi::preview1::{self, WasiP1Ctx};
use wasmtime_wasi::WasiCtxBuilder;
#[tokio::main]
async fn main() -> Result<()> {
let mut config = Config::new();
config.async_support(true);
let engine = Engine::new(&config)?;
let mut linker: Linker<WasiP1Ctx> = Linker::new(&engine);
preview1::add_to_linker_async(&mut linker, |t| t)?;
let wasi_ctx = WasiCtxBuilder::new().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(())
}