Skip to content

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

Open
@alexcrichton

Description

@alexcrichton

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    gen-rustRelated to bindings for Rust-compiled-to-WebAssembly

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions