Skip to content

[wit-bindgen-rust] Fix 2024 edition compat - #1205

Merged
alexcrichton merged 5 commits into
mainfrom
pch/wit-bindgen-rust-2024-compat
Mar 12, 2025
Merged

[wit-bindgen-rust] Fix 2024 edition compat#1205
alexcrichton merged 5 commits into
mainfrom
pch/wit-bindgen-rust-2024-compat

Conversation

@pchickey

Copy link
Copy Markdown
Contributor

Taking over #1183 for Yosh.

@pchickey
pchickeyforce-pushed the pch/wit-bindgen-rust-2024-compat branch from eda93d1 to 1ab0006CompareMarch 12, 2025 19:18
@alexcrichton
alexcrichton added this pull request to the merge queueMar 12, 2025
Merged via the queue into main with commit ebe5fc1Mar 12, 2025
@alexcrichton
alexcrichton deleted the pch/wit-bindgen-rust-2024-compat branch March 12, 2025 21:19
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 22, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@pchickey@alexcrichton@yoshuawuyts