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)]
6pub struct ParameterTree {
7 parameter_map: ParameterMap, }
9
10impl Default for ParameterTree {
11 fn default() -> Self {
12 Self {
13 parameter_map: HashMap::new(),
14 }
15 }
16}
17
18impl ParameterTree {
19 pub fn new() -> Self {
20 Self::default()
21 }
22
23 pub fn from_message(msg: ParameterTreeMsg) -> Option<Self> {
24 if msg.status != StatusCode::Ok as i32 {
25 return None;
26 }
27
28 let parameter_map: ParameterMap = msg
29 .params
30 .into_iter()
31 .map(|param_info| (param_info.path.clone(), param_info))
32 .collect();
33
34 Some(ParameterTree { parameter_map })
35 }
36
37 pub fn get_parameter_info(&self, parameter_path: &str) -> Option<&ParameterInfo> {
38 self.parameter_map.get(parameter_path)
39 }
40
41 pub fn get_parameter_data_type(&self, parameter_path: &str) -> Option<u32> {
42 self.parameter_map
43 .get(parameter_path)
44 .map(|param_info| param_info.data_type)
45 }
46
47 pub fn has_parameter(&self, parameter_path: &str) -> bool {
48 self.parameter_map.contains_key(parameter_path)
49 }
50
51 pub fn parameters(&self) -> impl Iterator<Item = (&str, &ParameterInfo)> {
53 self.parameter_map
54 .iter()
55 .filter(|(_, info)| info.param_type == ParameterType::Parameter as i32)
56 .map(|(path, info)| (path.as_str(), info))
57 }
58}