Skip to content

Commit 8a21b0a

Browse files
authored
Update to the latest version of Action trait (#7)
* Update to the latest version of Action trait Signed-off-by: Michael X. Grey <[email protected]> * Fix use of serde Signed-off-by: Michael X. Grey <[email protected]> --------- Signed-off-by: Michael X. Grey <[email protected]>
1 parent bfc382b commit 8a21b0a

File tree

4 files changed

+39
-37
lines changed

4 files changed

+39
-37
lines changed

rosidl_generator_rs/resource/action.rs.em

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ for subfolder, action in action_specs:
2626
}@
2727

2828
pub mod rmw {
29+
#[cfg(feature = "serde")]
30+
use serde::{Deserialize, Serialize};
2931
@{
3032
TEMPLATE(
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
@{
5156
TEMPLATE(
5257
'msg_idiomatic.rs.em',
@@ -84,24 +89,23 @@ extern "C" {
8489
pub struct @(type_name);
8590

8691
impl 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

rosidl_generator_rs/resource/msg.rs.em

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
pub mod rmw {
2+
#[cfg(feature = "serde")]
3+
use serde::{Deserialize, Serialize};
24
@{
35
TEMPLATE(
46
'msg_rmw.rs.em',
@@ -11,6 +13,9 @@ TEMPLATE(
1113
}@
1214
} // mod rmw
1315

16+
#[cfg(feature = "serde")]
17+
use serde::{Deserialize, Serialize};
18+
1419
@{
1520
TEMPLATE(
1621
'msg_idiomatic.rs.em',

rosidl_generator_rs/resource/msg_idiomatic.rs.em

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ from rosidl_parser.definition import UnboundedWString
1515
@# ############ Idiomatic message types ############
1616
@# #################################################
1717
@# These types use standard Rust containers where possible.
18-
#[cfg(feature = "serde")]
19-
use serde::{Deserialize, Serialize};
2018
@[for subfolder, msg_spec in msg_specs]@
2119
@{
2220
type_name = msg_spec.structure.namespaced_type.name

rosidl_generator_rs/resource/msg_rmw.rs.em

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ from rosidl_parser.definition import UnboundedSequence
1010
from rosidl_parser.definition import UnboundedString
1111
from rosidl_parser.definition import UnboundedWString
1212
}@
13-
#[cfg(feature = "serde")]
14-
use serde::{Deserialize, Serialize};
1513
@[for subfolder, msg_spec in msg_specs]@
1614
@{
1715
type_name = msg_spec.structure.namespaced_type.name

0 commit comments

Comments
 (0)