use serde::{de::DeserializeOwned, Serialize};
pub trait Message: Serialize + DeserializeOwned {}
impl Message for () {}
impl Message for String {}
pub struct MessageTypeName {
ros2_package_name: String, ros2_type_name: String,
}
impl MessageTypeName {
pub fn new(package_name: &str, type_name: &str) -> Self {
MessageTypeName {
ros2_package_name: package_name.to_owned(),
ros2_type_name: type_name.to_owned(),
}
}
pub fn dds_msg_type(&self) -> String {
slash_to_colons(self.ros2_package_name.clone() + "/msg/dds_/" + &self.ros2_type_name + "_")
}
pub fn dds_request_type(&self) -> String {
slash_to_colons(
self.ros2_package_name.clone() + "/srv/dds_/" + &self.ros2_type_name + "_Request_",
)
}
pub fn dds_response_type(&self) -> String {
slash_to_colons(
self.ros2_package_name.clone() + "/srv/dds_/" + &self.ros2_type_name + "_Response_",
)
}
pub fn dds_action_type(&self) -> String {
slash_to_colons(self.ros2_package_name.clone() + "/action/dds_/" + &self.ros2_type_name)
}
}
fn slash_to_colons(s: String) -> String {
s.replace('/', "::")
}