23
23
import rosidl_pycommon
24
24
25
25
from rosidl_parser .definition import AbstractGenericString
26
+ from rosidl_parser .definition import AbstractNestedType
27
+ from rosidl_parser .definition import AbstractSequence
28
+ from rosidl_parser .definition import AbstractString
29
+ from rosidl_parser .definition import AbstractWString
30
+ from rosidl_parser .definition import Action
26
31
from rosidl_parser .definition import Array
27
32
from rosidl_parser .definition import BasicType
28
33
from rosidl_parser .definition import BoundedSequence
@@ -86,13 +91,20 @@ def generate_rs(generator_arguments_file, typesupport_impls):
86
91
os .path .join (template_dir , 'srv.rs.em' ): ['rust/src/%s.rs' ],
87
92
}
88
93
94
+ mapping_actions = {
95
+ os .path .join (template_dir , 'action.rs.em' ): ['rust/src/%s.rs' ],
96
+ }
97
+
89
98
# Ensure the required templates exist
90
99
for template_file in mapping_msgs .keys ():
91
100
assert os .path .exists (template_file ), \
92
101
'Messages template file %s not found' % template_file
93
102
for template_file in mapping_srvs .keys ():
94
103
assert os .path .exists (template_file ), \
95
104
'Services template file %s not found' % template_file
105
+ for template_file in mapping_actions .keys ():
106
+ assert os .path .exists (template_file ), \
107
+ 'Actions template file %s not found' % template_file
96
108
97
109
data = {
98
110
'pre_field_serde' : pre_field_serde ,
@@ -107,6 +119,7 @@ def generate_rs(generator_arguments_file, typesupport_impls):
107
119
convert_lower_case_underscore_to_camel_case ,
108
120
'msg_specs' : [],
109
121
'srv_specs' : [],
122
+ 'action_specs' : [],
110
123
'package_name' : args ['package_name' ],
111
124
'typesupport_impls' : typesupport_impls ,
112
125
'interface_path' : idl_rel_path ,
@@ -121,6 +134,9 @@ def generate_rs(generator_arguments_file, typesupport_impls):
121
134
for service in idl_content .get_elements_of_type (Service ):
122
135
data ['srv_specs' ].append (('srv' , service ))
123
136
137
+ for action in idl_content .get_elements_of_type (Action ):
138
+ data ['action_specs' ].append (('action' , action ))
139
+
124
140
if data ['msg_specs' ]:
125
141
for template_file , generated_filenames in mapping_msgs .items ():
126
142
for generated_filename in generated_filenames :
@@ -143,6 +159,17 @@ def generate_rs(generator_arguments_file, typesupport_impls):
143
159
generated_file ,
144
160
minimum_timestamp = latest_target_timestamp )
145
161
162
+ if data ['action_specs' ]:
163
+ for template_file , generated_filenames in mapping_actions .items ():
164
+ for generated_filename in generated_filenames :
165
+ generated_file = os .path .join (args ['output_dir' ],
166
+ generated_filename % 'action' )
167
+ rosidl_pycommon .expand_template (
168
+ os .path .join (template_dir , template_file ),
169
+ data .copy (),
170
+ generated_file ,
171
+ minimum_timestamp = latest_target_timestamp )
172
+
146
173
rosidl_pycommon .expand_template (
147
174
os .path .join (template_dir , 'lib.rs.em' ),
148
175
data .copy (),
0 commit comments