bytecodealliance / bytecodealliance/wit-bindgen
rust: Support a more terse form of `with`-based remapping
- Dominant language
- Rust
- Stars
- 1.5k
- Forks
- 286
- Avg merge
- 6h 32m
- Merged PRs (30d)
- 19
Description
Currently `with` works by operating at the `interface` level, requiring a specification such as:
```rust
generate!({
with: {
"pkg:foo/bar": path::to::module,
}
});
```
This can get cumbersome for a suite of packages, however:
```rust
generate!({
with: {
"pkg:a/b1": ...,
"pkg:a/b2": ...,
"pkg:a/b3": ...,
"pkg:b/b1": ...,
"pkg:b/b2": ...,
"pkg:c/b1": ...,
...
}
});
```
I've seen this come up in the context of WASI where a bunch of WASI interfaces are referenced but the types to use should come from somewhere else. Especially with the `wasi` crate nowadays I think it should be easier to use the `wasi` crate wholesale. I'm imagining something like:
```rust
generate!({
with: {
"wasi": wasi, // refers to `wasi`-the-crate
}
});
```
I'm also thinking you could do:
```rust
generate!({
with: {
"wasi:cli": wasi::cli,
"wasi:io": wasi::io,
}
});
```
Where the general idea is that of the "path" that's `pkg:a/b` you could start chopping off pieces from the right and generate `pkg:a` and `pkg`. Both cases would be considered as covering all "children" of those namespaces, meaning that if `pkg:a` were specified then any interface in the `pkg:a` package would use the `with` key for `pkg:a`. The projections from that key would use the standard naming scheme that `wit-bindgen` already uses.
Ideally I'd like to see this ported to the `wasmtime::component::bindgen!` macro eventually too.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.