Struct rustdds::dds::With_Key_DataReader [−][src]
DDS DataReader for with_key topics.
Examples
use serde::{Serialize, Deserialize}; use rustdds::dds::DomainParticipant; use rustdds::dds::qos::QosPolicyBuilder; use rustdds::dds::data_types::TopicKind; use rustdds::dds::traits::Keyed; use rustdds::dds::With_Key_DataReader as DataReader; use rustdds::serialization::CDRDeserializerAdapter; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); #[derive(Serialize, Deserialize)] struct SomeType { a: i32 } impl Keyed for SomeType { type K = i32; fn get_key(&self) -> Self::K { self.a } } // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None);
Implementations
impl<D: 'static, DA> DataReader<D, DA> where
D: DeserializeOwned + Keyed,
<D as Keyed>::K: Key,
DA: DeserializerAdapter<D>,
[src]
D: DeserializeOwned + Keyed,
<D as Keyed>::K: Key,
DA: DeserializerAdapter<D>,
pub fn read(
&mut self,
max_samples: usize,
read_condition: ReadCondition
) -> Result<Vec<DataSample<&D>>>
[src]
&mut self,
max_samples: usize,
read_condition: ReadCondition
) -> Result<Vec<DataSample<&D>>>
Reads amount of samples found with max_samples
and read_condition
parameters.
Arguments
max_samples
- Limits maximum amount of samples readread_condition
- Limits results by condition
Examples
use rustdds::dds::data_types::ReadCondition; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... if let Ok(datas) = data_reader.read(10, ReadCondition::not_read()) { for data in datas.iter() { // do something } }
pub fn take(
&mut self,
max_samples: usize,
read_condition: ReadCondition
) -> Result<Vec<DataSample<D>>>
[src]
&mut self,
max_samples: usize,
read_condition: ReadCondition
) -> Result<Vec<DataSample<D>>>
Takes amount of sample found with max_samples
and read_condition
parameters.
Arguments
max_samples
- Limits maximum amount of samples readread_condition
- Limits results by condition
Examples
use rustdds::dds::data_types::ReadCondition; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... if let Ok(datas) = data_reader.take(10, ReadCondition::not_read()) { for data in datas.iter() { // do something } }
pub fn read_next_sample(&mut self) -> Result<Option<DataSample<&D>>>
[src]
Reads next unread sample
Examples
let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... while let Ok(Some(data)) = data_reader.read_next_sample() { // do something }
pub fn take_next_sample(&mut self) -> Result<Option<DataSample<D>>>
[src]
Takes next unread sample
Examples
let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... while let Ok(Some(data)) = data_reader.take_next_sample() { // do something }
pub fn iterator(&mut self) -> Result<impl Iterator<Item = Result<&D, D::K>>>
[src]
Produces an interator over the currently available NOT_READ samples.
Yields only payload data, not SampleInfo metadata
This is not called iter()
because it takes a mutable reference to self.
Examples
let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... for data in data_reader.iterator() { // do something }
pub fn conditional_iterator(
&mut self,
read_condition: ReadCondition
) -> Result<impl Iterator<Item = Result<&D, D::K>>>
[src]
&mut self,
read_condition: ReadCondition
) -> Result<impl Iterator<Item = Result<&D, D::K>>>
Produces an interator over the samples filtered b ygiven condition. Yields only payload data, not SampleInfo metadata
Examples
use rustdds::dds::data_types::ReadCondition; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... for data in data_reader.conditional_iterator(ReadCondition::any()) { // do something }
pub fn into_iterator(&mut self) -> Result<impl Iterator<Item = Result<D, D::K>>>
[src]
Produces an interator over the currently available NOT_READ samples.
Yields only payload data, not SampleInfo metadata
Removes samples from DataReader
.
Note! If the iterator is only partially consumed, all the samples it could have provided
are still removed from the Datareader
.
Examples
let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... for data in data_reader.into_iterator() { // do something }
pub fn into_conditional_iterator(
&mut self,
read_condition: ReadCondition
) -> Result<impl Iterator<Item = Result<D, D::K>>>
[src]
&mut self,
read_condition: ReadCondition
) -> Result<impl Iterator<Item = Result<D, D::K>>>
Produces an interator over the samples filtered b ygiven condition.
Yields only payload data, not SampleInfo metadata
Note! If the iterator is only partially consumed, all the samples it could have provided
are still removed from the Datareader
.
Examples
use rustdds::dds::data_types::ReadCondition; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... for data in data_reader.into_conditional_iterator(ReadCondition::not_read()) { // do something }
pub fn read_instance(
&mut self,
max_samples: usize,
read_condition: ReadCondition,
instance_key: Option<<D as Keyed>::K>,
this_or_next: SelectByKey
) -> Result<Vec<DataSample<&D>>>
[src]
&mut self,
max_samples: usize,
read_condition: ReadCondition,
instance_key: Option<<D as Keyed>::K>,
this_or_next: SelectByKey
) -> Result<Vec<DataSample<&D>>>
Works similarly to read(), but will return only samples from a specific instance. The instance is specified by an optional key. In case the key is not specified, the smallest (in key order) instance is selected. If a key is specified, then the parameter this_or_next specifies whether to access the instance with specified key or the following one, in key order.
This should cover DDS DataReader methods read_instance, read_next_instance, read_next_instance_w_condition.
Examples
use rustdds::dds::data_types::{ReadCondition,SelectByKey}; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... if let Ok(datas) = data_reader.read_instance(10, ReadCondition::any(), Some(3), SelectByKey::This) { for data in datas.iter() { // do something } }
pub fn take_instance(
&mut self,
max_samples: usize,
read_condition: ReadCondition,
instance_key: Option<<D as Keyed>::K>,
this_or_next: SelectByKey
) -> Result<Vec<DataSample<D>>>
[src]
&mut self,
max_samples: usize,
read_condition: ReadCondition,
instance_key: Option<<D as Keyed>::K>,
this_or_next: SelectByKey
) -> Result<Vec<DataSample<D>>>
Similar to read_instance, but will return owned datasamples This should cover DDS DataReader methods take_instance, take_next_instance, take_next_instance_w_condition.
Examples
use rustdds::dds::data_types::{ReadCondition,SelectByKey}; let domain_participant = DomainParticipant::new(0); let qos = QosPolicyBuilder::new().build(); let subscriber = domain_participant.create_subscriber(&qos).unwrap(); // WithKey is important let topic = domain_participant.create_topic("some_topic", "SomeType", &qos, TopicKind::WithKey).unwrap(); let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(topic, None, None).unwrap(); // Wait for data to arrive... if let Ok(datas) = data_reader.take_instance(10, ReadCondition::any(), Some(3), SelectByKey::Next) { for data in datas.iter() { // do something } }
Trait Implementations
impl<D, DA> Drop for DataReader<D, DA> where
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
[src]
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
impl<D, DA> Evented for DataReader<D, DA> where
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
[src]
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
fn register(
&self,
poll: &Poll,
token: Token,
interest: Ready,
opts: PollOpt
) -> Result<()>
[src]
&self,
poll: &Poll,
token: Token,
interest: Ready,
opts: PollOpt
) -> Result<()>
fn reregister(
&self,
poll: &Poll,
token: Token,
interest: Ready,
opts: PollOpt
) -> Result<()>
[src]
&self,
poll: &Poll,
token: Token,
interest: Ready,
opts: PollOpt
) -> Result<()>
fn deregister(&self, poll: &Poll) -> Result<()>
[src]
impl<D, DA> HasQoSPolicy for DataReader<D, DA> where
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
[src]
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
fn get_qos(&self) -> QosPolicies
[src]
impl<D, DA> RTPSEntity for DataReader<D, DA> where
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
[src]
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
fn get_guid(&self) -> GUID
[src]
fn get_entity_id(&self) -> EntityId
[src]
fn get_guid_prefix(&self) -> GuidPrefix
[src]
impl<D, DA> StatusEvented<DataReaderStatus> for DataReader<D, DA> where
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
[src]
D: Keyed + DeserializeOwned,
DA: DeserializerAdapter<D>,
fn as_status_evented(&mut self) -> &dyn Evented
[src]
fn try_recv_status(&self) -> Option<DataReaderStatus>
[src]
Auto Trait Implementations
impl<D, DA = CDRDeserializerAdapter<D>> !RefUnwindSafe for DataReader<D, DA>
[src]
impl<D, DA> Send for DataReader<D, DA> where
D: Send,
DA: Send,
<D as Keyed>::K: Send,
[src]
D: Send,
DA: Send,
<D as Keyed>::K: Send,
impl<D, DA = CDRDeserializerAdapter<D>> !Sync for DataReader<D, DA>
[src]
impl<D, DA> Unpin for DataReader<D, DA> where
DA: Unpin,
[src]
DA: Unpin,
impl<D, DA = CDRDeserializerAdapter<D>> !UnwindSafe for DataReader<D, DA>
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,