Skip to content

Complete support for rust 2024 edition - #1206

Merged
pchickey merged 2 commits into
mainfrom
pch/more_edition_2024
Mar 13, 2025
Merged

Complete support for rust 2024 edition#1206
pchickey merged 2 commits into
mainfrom
pch/more_edition_2024

Conversation

@pchickey

@pchickeypchickey commented Mar 12, 2025

Copy link
Copy Markdown
Contributor

based on #1192

wit-bindgen-test now checks all Rust builds under both editions 2021 and 2024.

Various minor fixes to codegen to support 2024 edition.

@pchickey
pchickeyforce-pushed the pch/more_edition_2024 branch 3 times, most recently from 3944b47 to b0a718bCompareMarch 12, 2025 22:10
@pchickey
pchickeyforce-pushed the pch/more_edition_2024 branch from b0a718b to 01dd966CompareMarch 12, 2025 22:14
@pchickeypchickey changed the title Pch/more edition 2024Complete support for rust 2024 editionMar 12, 2025
@pchickey
pchickey marked this pull request as ready for review March 12, 2025 22:19
@pchickeypchickey reopened this Mar 12, 2025
make various extern C blocks unsafe, and their call sites unsafe
all rust codegen tests pass for both edition 2021 and 2024.
@pchickey
pchickeyforce-pushed the pch/more_edition_2024 branch from 01dd966 to f878b73CompareMarch 12, 2025 23:02
@pchickey
pchickey enabled auto-merge March 12, 2025 23:12
@pchickey
pchickey added this pull request to the merge queueMar 12, 2025
Merged via the queue into main with commit 54f00ccMar 13, 2025
@pchickey
pchickey deleted the pch/more_edition_2024 branch March 13, 2025 00:02
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.

2 participants

@pchickey@alexcrichton