Description
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.