bytecodealliance / bytecodealliance/wasmtime
Satisfying imports for `wasmtime::component::bindgen!`
- Dominant language
- Rust
- Stars
- 18.6k
- Forks
- 1.8k
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 126
Description
Hi, I'm fairly new to all of this. If there's someplace else I should be going, please let me know. Thanks!
I'm trying to use `bindgen!` with a simple hello world WASM Component Model. I've built a simple one using:
```
$ cargo component new --lib hello
$ cd hello
$ cargo component build
```
The generated wit looks like the following:
```
package root:component;
world root {
import wasi:cli/environment@0.2.0;
import wasi:cli/exit@0.2.0;
import wasi:io/error@0.2.0;
import wasi:io/streams@0.2.0;
import wasi:cli/stdin@0.2.0;
import wasi:cli/stdout@0.2.0;
import wasi:cli/stderr@0.2.0;
import wasi:clocks/wall-clock@0.2.0;
import wasi:filesystem/types@0.2.0;
import wasi:filesystem/preopens@0.2.0;
export hello: func() -> string;
}
```
When I manually use `add_to_linker` I can get it to work:
```rust
use std::error::Error;
use wasmtime::{
component::{Component, Linker},
{Config, Engine, Store},
};
use wasmtime_wasi::{
bindings, {WasiCtxBuilder, WasiP1Ctx},
};
fn main() -> Result<(), Box> {
let engine = Engine::new(Config::new().wasm_component_model(true))?;
let component = Component::from_file(&engine, "hello.wasm")?;
let mut linker = Linker::::new(&engine);
bindings::cli::environment::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::cli::exit::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::io::error::add_to_linker(&mut linker, |x| x)?;
bindings::sync_io::io::streams::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::cli::stdin::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::cli::stdout::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::cli::stderr::add_to_linker(&mut linker, |x| x)?;
bindings::sync_io::filesystem::types::add_to_linker(&mut linker, |x| x)?;
bindings::wasi::filesystem::preopens::add_to_linker(&mut linker, |x| x)?;
let wasi_ctx = WasiCtxBuilder::new().build_p1();
let mut store = Store::new(&engine, wasi_ctx);
let instance = linker.instantiate(&mut store, &component)?;
let func = instance
.get_func(&mut store, "hello")
.expect("hello export not found");
let mut result = [wasmtime::component::Val::String("".into())];
func.call(&mut store, &[], &mut result)?;
println!("{:?}", result);
Ok(())
}
```
I'm trying to follow the documentation on using `wasmtime::components::bindgen!`:
```rust
wasmtime::component::bindgen!({
with: {
"wasi:cli/environment@0.2.0": wasmtime_wasi::bindings::wasi::cli::environment,
"wasi": "wasmtime_wasi::bindings",
},
});
```
I can't seem to get around this error:
```
error: failed to resolve directory while parsing WIT for path [/home/hone/Projects/rust/wasm/wasmtime_component_hello/wit]
Caused by:
package not found
--> /home/hone/Projects/rust/wasm/wasmtime_component_hello/wit/hello.wit:4:10
|
4 | import wasi:cli/environment@0.2.0;
| ^-------
```
Contributor guide
Assessment
This issue has not been assessed yet.