Skip to content

Commit 938fbb6

Browse files
committed
Split srv.rs.em into idiomatic and rmw template files
This results in the exact same file being produced for services, except for some whitespace changes. However, it enables actions to invoke the respective service template for its generation, similar to how the it works for services and their underlying messages.
1 parent 8d31e37 commit 938fbb6

File tree

3 files changed

+92
-65
lines changed

3 files changed

+92
-65
lines changed
Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,23 @@
1-
@{
2-
req_res_specs = []
3-
4-
for subfolder, service in srv_specs:
5-
req_res_specs.append((subfolder, service.request_message))
6-
req_res_specs.append((subfolder, service.response_message))
7-
}@
8-
91
@{
102
TEMPLATE(
11-
'msg_idiomatic.rs.em',
3+
'srv_idiomatic.rs.em',
124
package_name=package_name, interface_path=interface_path,
13-
msg_specs=req_res_specs,
5+
srv_specs=srv_specs,
146
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
157
pre_field_serde=pre_field_serde,
168
get_idiomatic_rs_type=get_idiomatic_rs_type,
179
constant_value_to_rs=constant_value_to_rs)
18-
}@
19-
20-
@[for subfolder, srv_spec in srv_specs]
21-
22-
@{
23-
type_name = srv_spec.namespaced_type.name
24-
}@
25-
26-
#[link(name = "@(package_name)__rosidl_typesupport_c")]
27-
extern "C" {
28-
fn rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() -> *const std::os::raw::c_void;
2910
}
3011

31-
// Corresponds to @(package_name)__@(subfolder)__@(type_name)
32-
pub struct @(type_name);
33-
34-
impl rosidl_runtime_rs::Service for @(type_name) {
35-
type Request = crate::@(subfolder)::@(type_name)_Request;
36-
type Response = crate::@(subfolder)::@(type_name)_Response;
37-
38-
fn get_type_support() -> *const std::os::raw::c_void {
39-
// SAFETY: No preconditions for this function.
40-
unsafe { rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() }
41-
}
42-
}
43-
44-
@[end for]
45-
4612
pub mod rmw {
4713
@{
4814
TEMPLATE(
49-
'msg_rmw.rs.em',
15+
'srv_rmw.rs.em',
5016
package_name=package_name, interface_path=interface_path,
51-
msg_specs=req_res_specs,
17+
srv_specs=srv_specs,
5218
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
5319
pre_field_serde=pre_field_serde,
5420
get_idiomatic_rs_type=get_idiomatic_rs_type,
5521
constant_value_to_rs=constant_value_to_rs)
5622
}@
57-
58-
@[for subfolder, srv_spec in srv_specs]
59-
60-
@{
61-
type_name = srv_spec.namespaced_type.name
62-
}@
63-
64-
#[link(name = "@(package_name)__rosidl_typesupport_c")]
65-
extern "C" {
66-
fn rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() -> *const std::os::raw::c_void;
67-
}
68-
69-
// Corresponds to @(package_name)__@(subfolder)__@(type_name)
70-
pub struct @(type_name);
71-
72-
impl rosidl_runtime_rs::Service for @(type_name) {
73-
type Request = crate::@(subfolder)::rmw::@(type_name)_Request;
74-
type Response = crate::@(subfolder)::rmw::@(type_name)_Response;
75-
76-
fn get_type_support() -> *const std::os::raw::c_void {
77-
// SAFETY: No preconditions for this function.
78-
unsafe { rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() }
79-
}
80-
}
81-
82-
@[end for]
83-
8423
} // mod rmw
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
@{
2+
req_res_specs = []
3+
4+
for subfolder, service in srv_specs:
5+
req_res_specs.append((subfolder, service.request_message))
6+
req_res_specs.append((subfolder, service.response_message))
7+
}@
8+
9+
@{
10+
TEMPLATE(
11+
'msg_idiomatic.rs.em',
12+
package_name=package_name, interface_path=interface_path,
13+
msg_specs=req_res_specs,
14+
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
15+
pre_field_serde=pre_field_serde,
16+
get_idiomatic_rs_type=get_idiomatic_rs_type,
17+
constant_value_to_rs=constant_value_to_rs)
18+
}@
19+
20+
@[for subfolder, srv_spec in srv_specs]
21+
22+
@{
23+
type_name = srv_spec.namespaced_type.name
24+
}@
25+
26+
#[link(name = "@(package_name)__rosidl_typesupport_c")]
27+
extern "C" {
28+
fn rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() -> *const std::os::raw::c_void;
29+
}
30+
31+
// Corresponds to @(package_name)__@(subfolder)__@(type_name)
32+
pub struct @(type_name);
33+
34+
impl rosidl_runtime_rs::Service for @(type_name) {
35+
type Request = crate::@(subfolder)::@(type_name)_Request;
36+
type Response = crate::@(subfolder)::@(type_name)_Response;
37+
38+
fn get_type_support() -> *const std::os::raw::c_void {
39+
// SAFETY: No preconditions for this function.
40+
unsafe { rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() }
41+
}
42+
}
43+
44+
@[end for]
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
@{
2+
req_res_specs = []
3+
4+
for subfolder, service in srv_specs:
5+
req_res_specs.append((subfolder, service.request_message))
6+
req_res_specs.append((subfolder, service.response_message))
7+
}@
8+
9+
@{
10+
TEMPLATE(
11+
'msg_rmw.rs.em',
12+
package_name=package_name, interface_path=interface_path,
13+
msg_specs=req_res_specs,
14+
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
15+
pre_field_serde=pre_field_serde,
16+
get_idiomatic_rs_type=get_idiomatic_rs_type,
17+
constant_value_to_rs=constant_value_to_rs)
18+
}@
19+
20+
@[for subfolder, srv_spec in srv_specs]
21+
22+
@{
23+
type_name = srv_spec.namespaced_type.name
24+
}@
25+
26+
#[link(name = "@(package_name)__rosidl_typesupport_c")]
27+
extern "C" {
28+
fn rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() -> *const std::os::raw::c_void;
29+
}
30+
31+
// Corresponds to @(package_name)__@(subfolder)__@(type_name)
32+
pub struct @(type_name);
33+
34+
impl rosidl_runtime_rs::Service for @(type_name) {
35+
type Request = crate::@(subfolder)::rmw::@(type_name)_Request;
36+
type Response = crate::@(subfolder)::rmw::@(type_name)_Response;
37+
38+
fn get_type_support() -> *const std::os::raw::c_void {
39+
// SAFETY: No preconditions for this function.
40+
unsafe { rosidl_typesupport_c__get_service_type_support_handle__@(package_name)__@(subfolder)__@(type_name)() }
41+
}
42+
}
43+
44+
@[end for]

0 commit comments

Comments
 (0)