use crate::{
dds_async::topic_description::TopicDescriptionAsync,
domain::domain_participant::DomainParticipant,
topic_definition::{content_filtered_topic::ContentFilteredTopic, topic::Topic},
};
use alloc::string::String;
pub enum TopicDescription {
Topic(Topic),
ContentFilteredTopic(ContentFilteredTopic),
}
impl Clone for TopicDescription {
fn clone(&self) -> Self {
match self {
Self::Topic(arg0) => Self::Topic(arg0.clone()),
Self::ContentFilteredTopic(arg0) => Self::ContentFilteredTopic(arg0.clone()),
}
}
}
impl From<TopicDescriptionAsync> for TopicDescription {
fn from(value: TopicDescriptionAsync) -> Self {
match value {
TopicDescriptionAsync::Topic(t) => TopicDescription::Topic(t.into()),
TopicDescriptionAsync::ContentFilteredTopic(t) => {
TopicDescription::ContentFilteredTopic(t.into())
}
}
}
}
impl From<TopicDescription> for TopicDescriptionAsync {
fn from(value: TopicDescription) -> Self {
match value {
TopicDescription::Topic(t) => TopicDescriptionAsync::Topic(t.into()),
TopicDescription::ContentFilteredTopic(t) => {
TopicDescriptionAsync::ContentFilteredTopic(t.into())
}
}
}
}
impl TopicDescription {
#[tracing::instrument(skip(self))]
pub fn get_participant(&self) -> DomainParticipant {
match self {
Self::Topic(t) => t.get_participant(),
Self::ContentFilteredTopic(t) => t.get_participant(),
}
}
#[tracing::instrument(skip(self))]
pub fn get_type_name(&self) -> String {
match self {
Self::Topic(t) => t.get_type_name(),
Self::ContentFilteredTopic(t) => t.get_type_name(),
}
}
#[tracing::instrument(skip(self))]
pub fn get_name(&self) -> String {
match self {
Self::Topic(t) => t.get_name(),
Self::ContentFilteredTopic(t) => t.get_name(),
}
}
}