zerodds_dcps_async/
subscriber.rs1use alloc::sync::Arc;
6
7use zerodds_dcps::{DataReaderQos, DdsType, Result, Subscriber, Topic};
8
9use crate::AsyncDataReader;
10
11#[derive(Clone)]
13pub struct AsyncSubscriber {
14 inner: Arc<Subscriber>,
15}
16
17impl AsyncSubscriber {
18 pub(crate) fn from_sync(inner: Subscriber) -> Self {
19 Self {
20 inner: Arc::new(inner),
21 }
22 }
23
24 pub fn create_datareader<T: DdsType + Send + Sync + 'static>(
29 &self,
30 topic: &Topic<T>,
31 qos: DataReaderQos,
32 ) -> Result<AsyncDataReader<T>> {
33 let reader = self.inner.create_datareader::<T>(topic, qos)?;
34 Ok(AsyncDataReader::from_sync(reader))
35 }
36
37 #[must_use]
39 pub fn as_sync(&self) -> &Subscriber {
40 &self.inner
41 }
42}