motorcortex_rust/client/
parameter_tree.rs1use crate::msg::{ParameterInfo, ParameterTreeMsg, ParameterType, StatusCode};
2use std::collections::HashMap;
3
4pub type ParameterMap = HashMap<String, ParameterInfo>;
5#[derive(Debug, Default)]
6pub struct ParameterTree {
7 parameter_map: ParameterMap, }
9
10impl ParameterTree {
11 pub fn new() -> Self {
12 Self::default()
13 }
14
15 pub fn from_message(msg: ParameterTreeMsg) -> Option<Self> {
16 if msg.status != StatusCode::Ok as i32 {
17 return None;
18 }
19
20 let parameter_map: ParameterMap = msg
21 .params
22 .into_iter()
23 .map(|param_info| (param_info.path.clone(), param_info))
24 .collect();
25
26 Some(ParameterTree { parameter_map })
27 }
28
29 pub fn get_parameter_info(&self, parameter_path: &str) -> Option<&ParameterInfo> {
30 self.parameter_map.get(parameter_path)
31 }
32
33 pub fn get_parameter_data_type(&self, parameter_path: &str) -> Option<u32> {
34 self.parameter_map
35 .get(parameter_path)
36 .map(|param_info| param_info.data_type)
37 }
38
39 pub fn has_parameter(&self, parameter_path: &str) -> bool {
40 self.parameter_map.contains_key(parameter_path)
41 }
42
43 pub fn parameters(&self) -> impl Iterator<Item = (&str, &ParameterInfo)> {
45 self.parameter_map
46 .iter()
47 .filter(|(_, info)| info.param_type == ParameterType::Parameter as i32)
48 .map(|(path, info)| (path.as_str(), info))
49 }
50}