rclrust 0.0.2

ROS2 client written in Rust
mod parameters;
mod rcl_params;
mod type_;
mod value;

use std::fmt;

pub(crate) use parameters::Parameters;
pub(crate) use rcl_params::RclParams;
pub(crate) use rclrust_msg::rcl_interfaces::msg::{
    Parameter as RclParameter, ParameterDescriptor, ParameterType as RclParameterType,
    ParameterValue as RclParameterValue, SetParametersResult,
};
pub use type_::ParameterType;
pub use value::ParameterValue;

#[derive(Debug, Clone, Default, PartialEq)]
pub struct Parameter {
    pub name: String,
    pub value: ParameterValue,
}

impl fmt::Display for Parameter {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(
            f,
            r#"Parameter(name="{}", value={})"#,
            self.name, self.value
        )
    }
}

impl Parameter {
    pub fn get_type(&self) -> ParameterType {
        self.value.get_type()
    }

    pub fn not_set(name: &str) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::not_set(),
        }
    }

    pub fn bool(name: &str, v: bool) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::bool(v),
        }
    }

    pub fn integer<T: Into<i64>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::integer(v),
        }
    }

    pub fn double<T: Into<f64>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::double(v),
        }
    }

    pub fn string<T: Into<String>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::string(v),
        }
    }

    pub fn byte_array<T: Into<Vec<u8>>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::byte_array(v),
        }
    }

    pub fn bool_array<T: Into<Vec<bool>>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::bool_array(v),
        }
    }

    pub fn integer_array<T: Into<Vec<i64>>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::integer_array(v),
        }
    }

    pub fn double_array<T: Into<Vec<f64>>>(name: &str, v: T) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::double_array(v),
        }
    }

    pub fn string_array(name: &str, v: Vec<String>) -> Self {
        Self {
            name: name.into(),
            value: ParameterValue::string_array(v),
        }
    }
}

impl From<RclParameter> for Parameter {
    fn from(v: RclParameter) -> Self {
        let RclParameter { name, value } = v;
        Self {
            name,
            value: value.into(),
        }
    }
}