Re: [PATCH v2 12/16] scripts/qapi: generate high-level Rust bindings
Paolo Bonzini <[email protected]> Mon, 23 Feb 2026 17:11:59 +0100
| Newsgroups | org.nongnu.qemu-rust,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 2/23/26 13:36, Markus Armbruster wrote: > Paolo Bonzini <[email protected]> writes: > >> From: Marc-André Lureau <[email protected]> >> >> Generate high-level native Rust declarations for the QAPI types. >> >> - char* is mapped to String, scalars to there corresponding Rust types >> >> - enums use #[repr(u32)] and can be transmuted to their C counterparts >> >> - has_foo/foo members are mapped to Option<T> >> >> - lists are represented as Vec<T> >> >> - structures map fields 1:1 to Rust >> >> - alternate are represented as Rust enum, each variant being a 1-element >> tuple >> >> - unions are represented in a similar way as in C: a struct S with a "u" >> member (since S may have extra 'base' fields). The discriminant >> isn't a member of S, since Rust enum already include it, but it can be >> recovered with "mystruct.u.into()" >> >> Anything that includes a recursive struct puts it in a Box. Lists are >> not considered recursive, because Vec breaks the recursion (it's possible >> to construct an object containing an empty Vec of its own type). >> >> Signed-off-by: Marc-André Lureau <[email protected]> >> Link: https://lore.kernel.org/r/[email protected] >> [Paolo: rewrite conversion of schema types to Rust types] >> Signed-off-by: Paolo Bonzini <[email protected]> > > Please mention how to actually generate Rust, because it's anything but > obvious: pass -B qapi.backend.QAPIRsBackend to qapi-gen.py. Recommend > to mention it again in the cover letter. > > Additionally, state that this is a hack we'll want to replace both in > the commit message and a TODO comment. See review of v1's cover letter > for why. Yes, the TODO comment is in patch 14 where the thing actually gets used. I can make it more prominent. Paolo