use zerodds_dcps::{
DdsType, DomainParticipant, PublisherQos, Result, SubscriberQos, Topic, TopicQos,
};
use crate::{AsyncPublisher, AsyncSubscriber};
#[derive(Clone)]
pub struct AsyncDomainParticipant {
inner: DomainParticipant,
}
impl AsyncDomainParticipant {
pub(crate) fn from_sync(inner: DomainParticipant) -> Self {
Self { inner }
}
#[must_use]
pub fn domain_id(&self) -> i32 {
self.inner.domain_id()
}
pub fn create_topic<T: DdsType>(&self, name: &str, qos: TopicQos) -> Result<Topic<T>> {
self.inner.create_topic::<T>(name, qos)
}
#[must_use]
pub fn create_publisher(&self, qos: PublisherQos) -> AsyncPublisher {
AsyncPublisher::from_sync(self.inner.create_publisher(qos))
}
#[must_use]
pub fn create_subscriber(&self, qos: SubscriberQos) -> AsyncSubscriber {
AsyncSubscriber::from_sync(self.inner.create_subscriber(qos))
}
#[must_use]
pub fn as_sync(&self) -> &DomainParticipant {
&self.inner
}
}