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))

Reply via email to