wit-bindgen
wit-bindgen copied to clipboard
rust: Support a more terse form of `with`-based remapping
Currently with
works by operating at the interface
level, requiring a specification such as:
generate!({
with: {
"pkg:foo/bar": path::to::module,
}
});
This can get cumbersome for a suite of packages, however:
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:
generate!({
with: {
"wasi": wasi, // refers to `wasi`-the-crate
}
});
I'm also thinking you could do:
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.
It would be good if component:bindgen
and maybe wasmtime
would allow pass-thru configuration to wit-bindgen
Could you clarify what you mean @sehz? I'm not sure I understand what you mean by pass-thru. Do you mean that the same configuration of wasmtime::component::bindgen!
whould work for wit_bindgen::generate!
?
I guess what I am looking for is parity between component:bindgen
and wit_bindgen:generate
.
Ah ok makes sense! I definitely agree that this work should go into Wasmtime as well when completed