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