Hi
On Thu, Jan 8, 2026 at 5:13 PM Paolo Bonzini <[email protected]> wrote:
>
> From: Marc-André Lureau <[email protected]>
>
> Signed-off-by: Marc-André Lureau <[email protected]>
> Signed-off-by: Paolo Bonzini <[email protected]>
> ---
> rust/tests/meson.build | 21 +-
> rust/tests/tests/integration.rs | 2 +
> rust/tests/tests/qapi.rs | 444 ++++++++++++++++++++++++++++++++
> 3 files changed, 464 insertions(+), 3 deletions(-)
> create mode 100644 rust/tests/tests/integration.rs
> create mode 100644 rust/tests/tests/qapi.rs
>
...
> + let qsa = to_qobject(&expected).unwrap();
> + let json = qsa.to_json();
> + assert_eq!(
> + json,
> + "{\"port\": \"port-val\", \"keep_alive_idle\": 42, \"host\":
> \"host-val\"}"
> + );
We need to fix the field names to produce the correct wire format:
index 41ed83c381d..3e0bd237d8c 100644
--- a/scripts/qapi/rs_types.py
+++ b/scripts/qapi/rs_types.py
@@ -163,15 +163,21 @@ def gen_struct_members(members:
List[QAPISchemaObjectTypeMember],
typ = 'Box<%s>' % typ
if memb.optional:
typ = 'Option<%s>' % typ
+ field_name = rs_name(camel_to_lower(memb.name))
+ serde_rename = ''
+ if field_name.removeprefix('r#') != memb.name:
+ serde_rename = '#[serde(rename = "%s")]' % memb.name
ret.append(mcgen('''
%(cfg)s''', '''
%(skip_if)s''', '''
+%(serde_rename)s''', '''
pub %(rs_name)s: %(rs_type)s,
''',
cfg=memb.ifcond.rsgen(),
skip_if=SERDE_SKIP_NONE if memb.optional else '',
+ serde_rename=serde_rename,
rs_type=typ,
- rs_name=rs_name(camel_to_lower(memb.name))))
+ rs_name=field_name))