motorcortex_rust/client/
parameter_tree.rs

1use crate::msg::{ParameterInfo, ParameterTreeMsg, StatusCode};
2use std::collections::HashMap;
3
4pub type ParameterMap = HashMap<String, ParameterInfo>;
5#[derive(Debug)]
6pub struct ParameterTree {
7    parameter_map: ParameterMap, // Key-value pairs for
8}
9
10impl ParameterTree {
11    pub fn new() -> Self {
12        Self {
13            parameter_map: HashMap::new(),
14        }
15    }
16
17    pub fn from_message(msg: ParameterTreeMsg) -> Option<Self> {
18        if msg.status != StatusCode::Ok as i32 {
19            return None;
20        }
21
22        let parameter_map: ParameterMap = msg
23            .params
24            .into_iter()
25            .map(|param_info| (param_info.path.clone(), param_info))
26            .collect();
27
28        Some(ParameterTree { parameter_map })
29    }
30
31    pub fn get_parameter_info(&self, parameter_path: &str) -> Option<&ParameterInfo> {
32        self.parameter_map.get(parameter_path)
33    }
34
35    pub fn get_parameter_data_type(&self, parameter_path: &str) -> Option<u32> {
36        self.parameter_map
37            .get(parameter_path)
38            .map(|param_info| param_info.data_type)
39    }
40
41    pub fn has_parameter(&self, parameter_path: &str) -> bool {
42        self.parameter_map.contains_key(parameter_path)
43    }
44}