Skip to content

Commit fa688e0

Browse files
committed
Vendor rcl_interfaces as a private module into rclrs
The parameter services require the rcl_interfaces message and service types.
1 parent 3534b0e commit fa688e0

File tree

9 files changed

+3385
-0
lines changed

9 files changed

+3385
-0
lines changed

rclrs/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ mod publisher;
1515
mod qos;
1616
mod service;
1717
mod subscription;
18+
mod vendor;
1819
mod wait;
1920

2021
mod rcl_bindings;

rclrs/src/parameter/service.rs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
use std::sync::{Arc, Weak, Mutex};
2+
3+
use crate::vendor::rcl_interfaces::srv::rmw::*;
4+
use crate::vendor::rcl_interfaces::msg::rmw::*;
5+
use rosidl_runtime_rs::{Sequence, seq};
6+
7+
use crate::{rmw_request_id_t, Node, RclrsError, Service, ServiceBase};
8+
use crate::rcl_bindings::rcl_node_t;
9+
10+
pub struct ParameterService {
11+
describe_parameters_service: Arc<Service<DescribeParameters>>,
12+
get_parameter_types_service: Arc<Service<GetParameterTypes>>,
13+
get_parameters_service: Arc<Service<GetParameters>>,
14+
list_parameters_service: Arc<Service<ListParameters>>,
15+
set_parameters_service: Arc<Service<SetParameters>>,
16+
set_parameters_atomically_service: Arc<Service<SetParametersAtomically>>,
17+
}
18+
19+
impl ParameterService {
20+
pub fn new(rcl_node_mtx: Arc<Mutex<rcl_node_t>>) -> Result<Self, RclrsError> {
21+
let describe_parameters_service = Service::new(Arc::clone(&rcl_node_mtx),
22+
"describe_parameters",
23+
|req_id: &rmw_request_id_t, req: DescribeParameters_Request| {
24+
DescribeParameters_Response {
25+
descriptors: seq![]
26+
}
27+
},
28+
)?;
29+
let get_parameter_types_service = Service::new(Arc::clone(&rcl_node_mtx),
30+
"get_parameter_types",
31+
|req_id: &rmw_request_id_t, req: GetParameterTypes_Request| {
32+
GetParameterTypes_Response {
33+
types: seq![]
34+
}
35+
},
36+
)?;
37+
let get_parameters_service = Service::new(Arc::clone(&rcl_node_mtx),
38+
"get_parameters",
39+
|req_id: &rmw_request_id_t, req: GetParameters_Request| {
40+
GetParameters_Response {
41+
values: seq![]
42+
}
43+
},
44+
)?;
45+
let list_parameters_service = Service::new(Arc::clone(&rcl_node_mtx),
46+
"list_parameters",
47+
|req_id: &rmw_request_id_t, req: ListParameters_Request| {
48+
ListParameters_Response {
49+
result: ListParametersResult::default()
50+
}
51+
},
52+
)?;
53+
let set_parameters_service = Service::new(Arc::clone(&rcl_node_mtx),
54+
"set_parameters",
55+
|req_id: &rmw_request_id_t, req: SetParameters_Request| {
56+
SetParameters_Response {
57+
results: seq![]
58+
}
59+
},
60+
)?;
61+
let set_parameters_atomically_service = Service::new(Arc::clone(&rcl_node_mtx),
62+
"set_parameters_atomically",
63+
|req_id: &rmw_request_id_t, req: SetParametersAtomically_Request| {
64+
SetParametersAtomically_Response {
65+
result: SetParametersResult::default()
66+
}
67+
},
68+
)?;
69+
Ok(Self {
70+
describe_parameters_service: Arc::new(describe_parameters_service),
71+
get_parameter_types_service: Arc::new(get_parameter_types_service),
72+
get_parameters_service: Arc::new(get_parameters_service),
73+
list_parameters_service: Arc::new(list_parameters_service),
74+
set_parameters_service: Arc::new(set_parameters_service),
75+
set_parameters_atomically_service: Arc::new(set_parameters_atomically_service),
76+
})
77+
}
78+
79+
pub fn services(&self) -> Vec<Weak<dyn ServiceBase>> {
80+
vec![
81+
Arc::downgrade(&self.describe_parameters_service) as Weak<dyn ServiceBase>,
82+
Arc::downgrade(&self.get_parameter_types_service) as Weak<dyn ServiceBase>,
83+
Arc::downgrade(&self.get_parameters_service) as Weak<dyn ServiceBase>,
84+
Arc::downgrade(&self.list_parameters_service) as Weak<dyn ServiceBase>,
85+
Arc::downgrade(&self.set_parameters_service) as Weak<dyn ServiceBase>,
86+
Arc::downgrade(&self.set_parameters_atomically_service) as Weak<dyn ServiceBase>,
87+
]
88+
}
89+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#![allow(non_camel_case_types)]
2+
3+
pub mod msg;
4+
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
pub mod rmw {
2+
#[cfg(feature = "serde")]
3+
use serde::{Deserialize, Serialize};
4+
5+
#[link(name = "builtin_interfaces__rosidl_typesupport_c")]
6+
extern "C" {
7+
fn rosidl_typesupport_c__get_message_type_support_handle__builtin_interfaces__msg__Duration() -> *const std::os::raw::c_void;
8+
}
9+
10+
#[link(name = "builtin_interfaces__rosidl_generator_c")]
11+
extern "C" {
12+
fn builtin_interfaces__msg__Duration__init(msg: *mut Duration) -> bool;
13+
fn builtin_interfaces__msg__Duration__Sequence__init(seq: *mut rosidl_runtime_rs::Sequence<Duration>, size: usize) -> bool;
14+
fn builtin_interfaces__msg__Duration__Sequence__fini(seq: *mut rosidl_runtime_rs::Sequence<Duration>);
15+
fn builtin_interfaces__msg__Duration__Sequence__copy(in_seq: &rosidl_runtime_rs::Sequence<Duration>, out_seq: *mut rosidl_runtime_rs::Sequence<Duration>) -> bool;
16+
}
17+
18+
// Corresponds to builtin_interfaces__msg__Duration
19+
#[repr(C)]
20+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
21+
#[derive(Clone, Debug, PartialEq, PartialOrd)]
22+
pub struct Duration {
23+
pub sec: i32,
24+
pub nanosec: u32,
25+
}
26+
27+
28+
29+
impl Default for Duration {
30+
fn default() -> Self {
31+
unsafe {
32+
let mut msg = std::mem::zeroed();
33+
if !builtin_interfaces__msg__Duration__init(&mut msg as *mut _) {
34+
panic!("Call to builtin_interfaces__msg__Duration__init() failed");
35+
}
36+
msg
37+
}
38+
}
39+
}
40+
41+
impl rosidl_runtime_rs::SequenceAlloc for Duration {
42+
fn sequence_init(seq: &mut rosidl_runtime_rs::Sequence<Self>, size: usize) -> bool {
43+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
44+
unsafe { builtin_interfaces__msg__Duration__Sequence__init(seq as *mut _, size) }
45+
}
46+
fn sequence_fini(seq: &mut rosidl_runtime_rs::Sequence<Self>) {
47+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
48+
unsafe { builtin_interfaces__msg__Duration__Sequence__fini(seq as *mut _) }
49+
}
50+
fn sequence_copy(in_seq: &rosidl_runtime_rs::Sequence<Self>, out_seq: &mut rosidl_runtime_rs::Sequence<Self>) -> bool {
51+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
52+
unsafe { builtin_interfaces__msg__Duration__Sequence__copy(in_seq, out_seq as *mut _) }
53+
}
54+
}
55+
56+
impl rosidl_runtime_rs::Message for Duration {
57+
type RmwMsg = Self;
58+
fn into_rmw_message(msg_cow: std::borrow::Cow<'_, Self>) -> std::borrow::Cow<'_, Self::RmwMsg> { msg_cow }
59+
fn from_rmw_message(msg: Self::RmwMsg) -> Self { msg }
60+
}
61+
62+
impl rosidl_runtime_rs::RmwMessage for Duration where Self: Sized {
63+
const TYPE_NAME: &'static str = "builtin_interfaces/msg/Duration";
64+
fn get_type_support() -> *const std::os::raw::c_void {
65+
// SAFETY: No preconditions for this function.
66+
unsafe { rosidl_typesupport_c__get_message_type_support_handle__builtin_interfaces__msg__Duration() }
67+
}
68+
}
69+
70+
71+
#[link(name = "builtin_interfaces__rosidl_typesupport_c")]
72+
extern "C" {
73+
fn rosidl_typesupport_c__get_message_type_support_handle__builtin_interfaces__msg__Time() -> *const std::os::raw::c_void;
74+
}
75+
76+
#[link(name = "builtin_interfaces__rosidl_generator_c")]
77+
extern "C" {
78+
fn builtin_interfaces__msg__Time__init(msg: *mut Time) -> bool;
79+
fn builtin_interfaces__msg__Time__Sequence__init(seq: *mut rosidl_runtime_rs::Sequence<Time>, size: usize) -> bool;
80+
fn builtin_interfaces__msg__Time__Sequence__fini(seq: *mut rosidl_runtime_rs::Sequence<Time>);
81+
fn builtin_interfaces__msg__Time__Sequence__copy(in_seq: &rosidl_runtime_rs::Sequence<Time>, out_seq: *mut rosidl_runtime_rs::Sequence<Time>) -> bool;
82+
}
83+
84+
// Corresponds to builtin_interfaces__msg__Time
85+
#[repr(C)]
86+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
87+
#[derive(Clone, Debug, PartialEq, PartialOrd)]
88+
pub struct Time {
89+
pub sec: i32,
90+
pub nanosec: u32,
91+
}
92+
93+
94+
95+
impl Default for Time {
96+
fn default() -> Self {
97+
unsafe {
98+
let mut msg = std::mem::zeroed();
99+
if !builtin_interfaces__msg__Time__init(&mut msg as *mut _) {
100+
panic!("Call to builtin_interfaces__msg__Time__init() failed");
101+
}
102+
msg
103+
}
104+
}
105+
}
106+
107+
impl rosidl_runtime_rs::SequenceAlloc for Time {
108+
fn sequence_init(seq: &mut rosidl_runtime_rs::Sequence<Self>, size: usize) -> bool {
109+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
110+
unsafe { builtin_interfaces__msg__Time__Sequence__init(seq as *mut _, size) }
111+
}
112+
fn sequence_fini(seq: &mut rosidl_runtime_rs::Sequence<Self>) {
113+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
114+
unsafe { builtin_interfaces__msg__Time__Sequence__fini(seq as *mut _) }
115+
}
116+
fn sequence_copy(in_seq: &rosidl_runtime_rs::Sequence<Self>, out_seq: &mut rosidl_runtime_rs::Sequence<Self>) -> bool {
117+
// SAFETY: This is safe since the pointer is guaranteed to be valid/initialized.
118+
unsafe { builtin_interfaces__msg__Time__Sequence__copy(in_seq, out_seq as *mut _) }
119+
}
120+
}
121+
122+
impl rosidl_runtime_rs::Message for Time {
123+
type RmwMsg = Self;
124+
fn into_rmw_message(msg_cow: std::borrow::Cow<'_, Self>) -> std::borrow::Cow<'_, Self::RmwMsg> { msg_cow }
125+
fn from_rmw_message(msg: Self::RmwMsg) -> Self { msg }
126+
}
127+
128+
impl rosidl_runtime_rs::RmwMessage for Time where Self: Sized {
129+
const TYPE_NAME: &'static str = "builtin_interfaces/msg/Time";
130+
fn get_type_support() -> *const std::os::raw::c_void {
131+
// SAFETY: No preconditions for this function.
132+
unsafe { rosidl_typesupport_c__get_message_type_support_handle__builtin_interfaces__msg__Time() }
133+
}
134+
}
135+
136+
137+
} // mod rmw
138+
139+
140+
#[cfg(feature = "serde")]
141+
use serde::{Deserialize, Serialize};
142+
143+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
144+
#[derive(Clone, Debug, PartialEq, PartialOrd)]
145+
pub struct Duration {
146+
pub sec: i32,
147+
pub nanosec: u32,
148+
}
149+
150+
151+
152+
impl Default for Duration {
153+
fn default() -> Self {
154+
<Self as rosidl_runtime_rs::Message>::from_rmw_message(crate::vendor::builtin_interfaces::msg::rmw::Duration::default())
155+
}
156+
}
157+
158+
impl rosidl_runtime_rs::Message for Duration {
159+
type RmwMsg = crate::vendor::builtin_interfaces::msg::rmw::Duration;
160+
161+
fn into_rmw_message(msg_cow: std::borrow::Cow<'_, Self>) -> std::borrow::Cow<'_, Self::RmwMsg> {
162+
match msg_cow {
163+
std::borrow::Cow::Owned(msg) => std::borrow::Cow::Owned(Self::RmwMsg {
164+
sec: msg.sec,
165+
nanosec: msg.nanosec,
166+
}),
167+
std::borrow::Cow::Borrowed(msg) => std::borrow::Cow::Owned(Self::RmwMsg {
168+
sec: msg.sec,
169+
nanosec: msg.nanosec,
170+
})
171+
}
172+
}
173+
174+
fn from_rmw_message(msg: Self::RmwMsg) -> Self {
175+
Self {
176+
sec: msg.sec,
177+
nanosec: msg.nanosec,
178+
}
179+
}
180+
}
181+
182+
183+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
184+
#[derive(Clone, Debug, PartialEq, PartialOrd)]
185+
pub struct Time {
186+
pub sec: i32,
187+
pub nanosec: u32,
188+
}
189+
190+
191+
192+
impl Default for Time {
193+
fn default() -> Self {
194+
<Self as rosidl_runtime_rs::Message>::from_rmw_message(crate::vendor::builtin_interfaces::msg::rmw::Time::default())
195+
}
196+
}
197+
198+
impl rosidl_runtime_rs::Message for Time {
199+
type RmwMsg = crate::vendor::builtin_interfaces::msg::rmw::Time;
200+
201+
fn into_rmw_message(msg_cow: std::borrow::Cow<'_, Self>) -> std::borrow::Cow<'_, Self::RmwMsg> {
202+
match msg_cow {
203+
std::borrow::Cow::Owned(msg) => std::borrow::Cow::Owned(Self::RmwMsg {
204+
sec: msg.sec,
205+
nanosec: msg.nanosec,
206+
}),
207+
std::borrow::Cow::Borrowed(msg) => std::borrow::Cow::Owned(Self::RmwMsg {
208+
sec: msg.sec,
209+
nanosec: msg.nanosec,
210+
})
211+
}
212+
}
213+
214+
fn from_rmw_message(msg: Self::RmwMsg) -> Self {
215+
Self {
216+
sec: msg.sec,
217+
nanosec: msg.nanosec,
218+
}
219+
}
220+
}
221+
222+

rclrs/src/vendor/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//! Vendored by vendor_interfaces.py
2+
3+
#![allow(dead_code)]
4+
5+
pub mod builtin_interfaces;
6+
pub mod rcl_interfaces;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#![allow(non_camel_case_types)]
2+
3+
pub mod msg;
4+
5+
pub mod srv;

0 commit comments

Comments
 (0)