@@ -26,6 +26,8 @@ for subfolder, action in action_specs:
2626}@
2727
2828pub mod rmw {
29+ # [cfg(feature = "serde")]
30+ use serde :: {Deserialize, Serialize};
2931@ {
3032TEMPLATE (
3133 ' msg_rmw.rs.em' ,
@@ -47,6 +49,9 @@ TEMPLATE(
4749}@
4850} // mod rmw
4951
52+ # [cfg(feature = "serde")]
53+ use serde :: {Deserialize, Serialize};
54+
5055@ {
5156TEMPLATE (
5257 ' msg_idiomatic.rs.em' ,
@@ -84,24 +89,23 @@ extern "C" {
8489pub struct @ (type_name);
8590
8691impl rosidl_runtime_rs :: Action for @ (type_name) {
92+ // -- - Associated types for client library users -- -
8793 type Goal = crate :: @ (subfolder):: @ (type_name)@ (ACTION_GOAL_SUFFIX);
8894 type Result = crate :: @ (subfolder):: @ (type_name)@ (ACTION_RESULT_SUFFIX);
8995 type Feedback = crate :: @ (subfolder):: @ (type_name)@ (ACTION_FEEDBACK_SUFFIX);
9096
91- fn get_type_support () -> * const std :: ffi :: c_void {
92- // SAFETY : No preconditions for this function .
93- unsafe { rosidl_typesupport_c__get_action_type_support_handle__@ (package_name)__@ (subfolder)__@ (type_name)() }
94- }
95- }
96-
97- impl rosidl_runtime_rs :: ActionImpl for @ (type_name) {
98- type GoalStatusMessage = action_msgs :: msg :: rmw :: GoalStatusArray ;
97+ // -- - Associated types for client library implementation -- -
9998 type FeedbackMessage = crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_MESSAGE_SUFFIX);
100-
10199 type SendGoalService = crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_GOAL_SERVICE_SUFFIX);
102100 type CancelGoalService = action_msgs :: srv :: rmw :: CancelGoal ;
103101 type GetResultService = crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SERVICE_SUFFIX);
104102
103+ // -- - Methods for client library implementation -- -
104+ fn get_type_support () -> * const std :: ffi :: c_void {
105+ // SAFETY : No preconditions for this function .
106+ unsafe { rosidl_typesupport_c__get_action_type_support_handle__@ (package_name)__@ (subfolder)__@ (type_name)() }
107+ }
108+
105109 fn create_goal_request (
106110 goal_id : & [u8; 16 ],
107111 goal : crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_GOAL_SUFFIX),
@@ -112,10 +116,13 @@ impl rosidl_runtime_rs::ActionImpl for @(type_name) {
112116 }
113117 }
114118
115- fn get_goal_request_uuid (
116- request : & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_GOAL_SERVICE_SUFFIX)@ (SERVICE_REQUEST_MESSAGE_SUFFIX),
117- ) -> & [u8; 16 ] {
118- & request .goal_id .uuid
119+ fn split_goal_request (
120+ request : crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_GOAL_SERVICE_SUFFIX)@ (SERVICE_REQUEST_MESSAGE_SUFFIX),
121+ ) -> (
122+ [u8; 16 ],
123+ crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_GOAL_SUFFIX),
124+ ) {
125+ (request .goal_id .uuid , request .goal )
119126 }
120127
121128 fn create_goal_response (
@@ -153,16 +160,13 @@ impl rosidl_runtime_rs::ActionImpl for @(type_name) {
153160 message
154161 }
155162
156- fn get_feedback_message_uuid (
157- feedback : & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_MESSAGE_SUFFIX),
158- ) -> & [u8; 16 ] {
159- & feedback .goal_id .uuid
160- }
161-
162- fn get_feedback_message_feedback (
163- feedback : & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_MESSAGE_SUFFIX),
164- ) -> & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_SUFFIX) {
165- & feedback .feedback
163+ fn split_feedback_message (
164+ feedback : crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_MESSAGE_SUFFIX),
165+ ) -> (
166+ [u8; 16 ],
167+ crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_FEEDBACK_SUFFIX),
168+ ) {
169+ (feedback .goal_id .uuid , feedback .feedback )
166170 }
167171
168172 fn create_result_request (
@@ -189,16 +193,13 @@ impl rosidl_runtime_rs::ActionImpl for @(type_name) {
189193 }
190194 }
191195
192- fn get_result_response_result (
193- response : & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SERVICE_SUFFIX)@ (SERVICE_RESPONSE_MESSAGE_SUFFIX),
194- ) -> & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SUFFIX) {
195- & response .result
196- }
197-
198- fn get_result_response_status (
199- response : & crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SERVICE_SUFFIX)@ (SERVICE_RESPONSE_MESSAGE_SUFFIX),
200- ) -> i8 {
201- response .status
196+ fn split_result_response (
197+ response : crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SERVICE_SUFFIX)@ (SERVICE_RESPONSE_MESSAGE_SUFFIX)
198+ ) -> (
199+ i8,
200+ crate :: @ (subfolder):: rmw :: @ (type_name)@ (ACTION_RESULT_SUFFIX),
201+ ) {
202+ (response .status , response .result )
202203 }
203204}
204205
0 commit comments