From 23a05f1f32101a6c8d85cfb139bf3bb2c58b2381 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Wed, 20 Mar 2024 13:27:16 +0100 Subject: [PATCH] Add dummy field to empty structs to make them compatible with C++ bridge --- .../ros2-bridge/msg-gen/src/types/message.rs | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/libraries/extensions/ros2-bridge/msg-gen/src/types/message.rs b/libraries/extensions/ros2-bridge/msg-gen/src/types/message.rs index f3e1ea09..6e06b0db 100644 --- a/libraries/extensions/ros2-bridge/msg-gen/src/types/message.rs +++ b/libraries/extensions/ros2-bridge/msg-gen/src/types/message.rs @@ -179,18 +179,42 @@ impl Message { (quote! {}, quote! {}) }; - if self.members.is_empty() { - (quote! {}, quote! {}); - } - let def = quote! { - #[allow(non_camel_case_types)] - #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] - #attributes - pub struct #struct_raw_name { - #(#rust_type_def_inner)* + let def = if self.members.is_empty() { + quote! { + #[allow(non_camel_case_types)] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + #attributes + pub struct #struct_raw_name { + #[serde(skip)] + pub(super) _dummy: u8, + } + + #cxx_consts } + } else { + quote! { + #[allow(non_camel_case_types)] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + #attributes + pub struct #struct_raw_name { + #(#rust_type_def_inner)* + } - #cxx_consts + #cxx_consts + } + }; + let default = if self.members.is_empty() { + quote! { + Self { + _dummy: 0, + } + } + } else { + quote! { + Self { + #(#rust_type_default_inner)* + } + } }; let impls = quote! { impl ffi::#struct_raw_name { @@ -200,9 +224,7 @@ impl Message { impl crate::_core::InternalDefault for ffi::#struct_raw_name { fn _default() -> Self { - Self { - #(#rust_type_default_inner)* - } + #default } }