Skip to content

Commit

Permalink
Added action generation
Browse files Browse the repository at this point in the history
  • Loading branch information
esteve committed Nov 28, 2022
1 parent b3f0eef commit 795a3ac
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
30 changes: 29 additions & 1 deletion rosidl_generator_rs/resource/action.rs.em
Original file line number Diff line number Diff line change
@@ -1,8 +1,36 @@
@{
action_msg_specs = []

for subfolder, action in action_specs:
action_msg_specs.append((subfolder, action.goal))
action_msg_specs.append((subfolder, action.result))
action_msg_specs.append((subfolder, action.feedback))
action_msg_specs.append((subfolder, action.feedback_message))

action_srv_specs = []

for subfolder, action in action_specs:
action_srv_specs.append((subfolder, action.send_goal_service))
action_srv_specs.append((subfolder, action.get_result_service))
}@

pub mod rmw {
@{
TEMPLATE(
'msg_rmw.rs.em',
package_name=package_name, interface_path=interface_path,
msg_specs=action_msg_specs,
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
get_idiomatic_rs_type=get_idiomatic_rs_type,
constant_value_to_rs=constant_value_to_rs)
}@
} // mod rmw

@{
TEMPLATE(
'msg_idiomatic.rs.em',
package_name=package_name, interface_path=interface_path,
msg_specs=msg_specs,
msg_specs=action_msg_specs,
get_rs_name=get_rs_name, get_rmw_rs_type=get_rmw_rs_type,
get_idiomatic_rs_type=get_idiomatic_rs_type,
constant_value_to_rs=constant_value_to_rs)
Expand Down
23 changes: 23 additions & 0 deletions rosidl_generator_rs/rosidl_generator_rs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from rosidl_parser.definition import AbstractSequence
from rosidl_parser.definition import AbstractString
from rosidl_parser.definition import AbstractWString
from rosidl_parser.definition import Action
from rosidl_parser.definition import Array
from rosidl_parser.definition import BASIC_TYPES
from rosidl_parser.definition import BasicType
Expand Down Expand Up @@ -93,13 +94,20 @@ def generate_rs(generator_arguments_file, typesupport_impls):
os.path.join(template_dir, 'srv.rs.em'): ['rust/src/%s.rs'],
}

mapping_actions = {
os.path.join(template_dir, 'action.rs.em'): ['rust/src/%s.rs'],
}

# Ensure the required templates exist
for template_file in mapping_msgs.keys():
assert os.path.exists(template_file), \
'Messages template file %s not found' % template_file
for template_file in mapping_srvs.keys():
assert os.path.exists(template_file), \
'Services template file %s not found' % template_file
for template_file in mapping_actions.keys():
assert os.path.exists(template_file), \
'Actions template file %s not found' % template_file

data = {
'get_rmw_rs_type': make_get_rmw_rs_type(args['package_name']),
Expand All @@ -113,6 +121,7 @@ def generate_rs(generator_arguments_file, typesupport_impls):
convert_lower_case_underscore_to_camel_case,
'msg_specs': [],
'srv_specs': [],
'action_specs': [],
'package_name': args['package_name'],
'typesupport_impls': typesupport_impls,
'interface_path': idl_rel_path,
Expand All @@ -127,6 +136,9 @@ def generate_rs(generator_arguments_file, typesupport_impls):
for service in idl_content.get_elements_of_type(Service):
data['srv_specs'].append(('srv', service))

for action in idl_content.get_elements_of_type(Action):
data['action_specs'].append(('action', action))

if data['msg_specs']:
for template_file, generated_filenames in mapping_msgs.items():
for generated_filename in generated_filenames:
Expand All @@ -149,6 +161,17 @@ def generate_rs(generator_arguments_file, typesupport_impls):
generated_file,
minimum_timestamp=latest_target_timestamp)

if data['action_specs']:
for template_file, generated_filenames in mapping_actions.items():
for generated_filename in generated_filenames:
generated_file = os.path.join(args['output_dir'],
generated_filename % 'action')
expand_template(
os.path.join(template_dir, template_file),
data.copy(),
generated_file,
minimum_timestamp=latest_target_timestamp)

expand_template(
os.path.join(template_dir, 'lib.rs.em'),
data.copy(),
Expand Down

0 comments on commit 795a3ac

Please sign in to comment.