wit-bindgen icon indicating copy to clipboard operation
wit-bindgen copied to clipboard

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

Open alexcrichton opened this issue 6 months ago • 4 comments

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.

alexcrichton avatar Feb 14 '24 19:02 alexcrichton

It would be good if component:bindgen and maybe wasmtime would allow pass-thru configuration to wit-bindgen

sehz avatar Feb 15 '24 00:02 sehz

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!?

alexcrichton avatar Feb 15 '24 16:02 alexcrichton

I guess what I am looking for is parity between component:bindgen and wit_bindgen:generate.

sehz avatar Feb 16 '24 01:02 sehz

Ah ok makes sense! I definitely agree that this work should go into Wasmtime as well when completed

alexcrichton avatar Feb 16 '24 16:02 alexcrichton