motorcortex_rust/client/
parameter_tree.rs1use 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, }
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}