Skip to content

feat: Allow variants and records to be ignored by additional_derives - #1199

Merged
pchickey merged 1 commit into
bytecodealliance:mainfrom
cdmurph32:additional_derives_ignore
Mar 10, 2025
Merged

feat: Allow variants and records to be ignored by additional_derives#1199
pchickey merged 1 commit into
bytecodealliance:mainfrom
cdmurph32:additional_derives_ignore

Conversation

@cdmurph32

Copy link
Copy Markdown
Contributor

This feature allows some variants and records to use types for which adding traits will cause compilation to fail, such as serde::Deserialize on wasi:io/streams.

Variants and records are specified as they are listed in the wit file, i.e. in kebab case.

This feature allows some variants and records to use types for which
adding traits will cause compilation to fail, such as
serde::Deserialize on wasi:io/streams.
Variants and records are specified as they are listed in the wit file,
i.e. in kebab case.

@pchickeypchickey left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@pchickey
pchickey added this pull request to the merge queueMar 10, 2025
Merged via the queue into bytecodealliance:main with commit d73c073Mar 10, 2025
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

@cdmurph32@pchickey