motorcortex-rust 0.5.0

Motorcortex Rust: a Rust client for the Motorcortex Core real-time control system (async + blocking).
Documentation
use crate::msg::{ParameterInfo, ParameterTreeMsg, ParameterType, StatusCode};
use std::collections::HashMap;

pub type ParameterMap = HashMap<String, ParameterInfo>;
#[derive(Debug, Default)]
pub struct ParameterTree {
    parameter_map: ParameterMap, // Key-value pairs for
}

impl ParameterTree {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn from_message(msg: ParameterTreeMsg) -> Option<Self> {
        if msg.status != StatusCode::Ok as i32 {
            return None;
        }

        let parameter_map: ParameterMap = msg
            .params
            .into_iter()
            .map(|param_info| (param_info.path.clone(), param_info))
            .collect();

        Some(ParameterTree { parameter_map })
    }

    pub fn get_parameter_info(&self, parameter_path: &str) -> Option<&ParameterInfo> {
        self.parameter_map.get(parameter_path)
    }

    pub fn get_parameter_data_type(&self, parameter_path: &str) -> Option<u32> {
        self.parameter_map
            .get(parameter_path)
            .map(|param_info| param_info.data_type)
    }

    pub fn has_parameter(&self, parameter_path: &str) -> bool {
        self.parameter_map.contains_key(parameter_path)
    }

    /// Returns an iterator over all parameter leaves (param_type == Parameter).
    pub fn parameters(&self) -> impl Iterator<Item = (&str, &ParameterInfo)> {
        self.parameter_map
            .iter()
            .filter(|(_, info)| info.param_type == ParameterType::Parameter as i32)
            .map(|(path, info)| (path.as_str(), info))
    }
}