#[must_use]
pub fn ros_topic(logical: &str) -> String {
format!("rt/{}", logical.trim_start_matches('/'))
}
#[must_use]
pub fn ros_type_name(package: &str, type_name: &str) -> String {
format!("{package}::msg::dds_::{type_name}_")
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RosMessage {
PoseStamped,
TransformStamped,
TfMessage,
GeoPoseStamped,
Detection3D,
Detection3DArray,
Imu,
}
impl RosMessage {
#[must_use]
pub const fn package_and_type(self) -> (&'static str, &'static str) {
match self {
Self::PoseStamped => ("geometry_msgs", "PoseStamped"),
Self::TransformStamped => ("geometry_msgs", "TransformStamped"),
Self::TfMessage => ("tf2_msgs", "TFMessage"),
Self::GeoPoseStamped => ("geographic_msgs", "GeoPoseStamped"),
Self::Detection3D => ("vision_msgs", "Detection3D"),
Self::Detection3DArray => ("vision_msgs", "Detection3DArray"),
Self::Imu => ("sensor_msgs", "Imu"),
}
}
#[must_use]
pub fn dds_type(self) -> String {
let (pkg, ty) = self.package_and_type();
ros_type_name(pkg, ty)
}
}