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>,