bytecodealliance / bytecodealliance/wit-bindgen

rust: Support a more terse form of `with`-based remapping

Open
#840 4 comments 0 reactions 0 assignees View on GitHub
gen-rust
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.