Skip to content

Commit 1487666

Browse files
committed
Add support for node parameters
1 parent d27a678 commit 1487666

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

rclrs/src/node/builder.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,11 @@ impl NodeBuilder {
266266

267267
let _parameter_map = unsafe {
268268
let fqn = call_string_getter_with_handle(&rcl_node, rcl_node_get_fully_qualified_name);
269-
resolve_parameter_overrides(fqn, &rcl_context.global_arguments)?
269+
resolve_parameter_overrides(
270+
fqn,
271+
&rcl_node_options.arguments,
272+
&rcl_context.global_arguments,
273+
)?
270274
};
271275
let rcl_node_mtx = Arc::new(Mutex::new(rcl_node));
272276

@@ -278,7 +282,7 @@ impl NodeBuilder {
278282
})
279283
}
280284

281-
/// Creates node options.
285+
/// Creates a rcl_node_options_t struct from this builder.
282286
///
283287
/// Any fields not present in the builder will have their default value.
284288
/// For detail about default values, see [`NodeBuilder`][1] docs.

rclrs/src/parameter/override_map.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,26 @@ pub(crate) type ParameterOverrideMap = BTreeMap<String, ParameterValue>;
109109
/// sizes or dangling pointers.
110110
pub(crate) unsafe fn resolve_parameter_overrides(
111111
node_fqn: String,
112+
rcl_node_arguments: &rcl_arguments_t,
112113
rcl_global_arguments: &rcl_arguments_t,
113114
) -> Result<ParameterOverrideMap, RclrsError> {
114115
let mut map = BTreeMap::new();
115-
let mut rcl_params = std::ptr::null_mut();
116-
rcl_arguments_get_param_overrides(rcl_global_arguments, &mut rcl_params).ok()?;
117-
// Check for the /** node first, and later overwrite with the more specific node
118-
// parameters, if they exist
119-
for name_to_match in ["/**", node_fqn.as_str()] {
120-
for (node_name, node_params) in RclParamsIter::new(rcl_params) {
121-
if node_name == name_to_match {
122-
for (param_name, variant) in RclNodeParamsIter::new(node_params) {
123-
let value = ParameterValue::from_rcl_variant(variant);
124-
map.insert(param_name, value);
116+
for rcl_arguments in [rcl_global_arguments, rcl_node_arguments] {
117+
let mut rcl_params = std::ptr::null_mut();
118+
rcl_arguments_get_param_overrides(rcl_arguments, &mut rcl_params).ok()?;
119+
// Check for the /** node first, and later overwrite with the more specific node
120+
// parameters, if they exist
121+
for name_to_match in ["/**", node_fqn.as_str()] {
122+
for (node_name, node_params) in RclParamsIter::new(rcl_params) {
123+
if node_name == name_to_match {
124+
for (param_name, variant) in RclNodeParamsIter::new(node_params) {
125+
let value = ParameterValue::from_rcl_variant(variant);
126+
map.insert(param_name, value);
127+
}
125128
}
126129
}
127130
}
131+
rcl_yaml_node_struct_fini(rcl_params);
128132
}
129-
rcl_yaml_node_struct_fini(rcl_params);
130133
Ok(map)
131134
}

0 commit comments

Comments
 (0)