Skip to main content

zerodds_dcps_async/
subscriber.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! AsyncSubscriber — newtype.
4
5use alloc::sync::Arc;
6
7use zerodds_dcps::{DataReaderQos, DdsType, Result, Subscriber, Topic};
8
9use crate::AsyncDataReader;
10
11/// Async-Wrapper um `Subscriber`.
12#[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    /// Erstellt einen DataReader.
25    ///
26    /// # Errors
27    /// Wie `Subscriber::create_datareader`.
28    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    /// Liefert die zugrundeliegende sync-Variante.
38    #[must_use]
39    pub fn as_sync(&self) -> &Subscriber {
40        &self.inner
41    }
42}