pub struct DataReader<D: Keyed + DeserializeOwned, DA: DeserializerAdapter<D> = CDRDeserializerAdapter<D>> { /* private fields */ }
Expand description

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::with_key::DataReader;
use rustdds::serialization::CDRDeserializerAdapter;

let domain_participant = DomainParticipant::new(0).unwrap();
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 key(&self) -> Self::K {
    self.a
  }
}

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None);

Implementations

Reads amount of samples found with max_samples and read_condition parameters.

Arguments
  • max_samples - Limits maximum amount of samples read
  • read_condition - Limits results by condition
Examples
use rustdds::dds::data_types::ReadCondition;

let domain_participant = DomainParticipant::new(0).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, 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
  }
}

Takes amount of sample found with max_samples and read_condition parameters.

Arguments
  • max_samples - Limits maximum amount of samples read
  • read_condition - Limits results by condition
Examples
use rustdds::dds::data_types::ReadCondition;

let domain_participant = DomainParticipant::new(0).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, 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
  }
}

Reads next unread sample

Examples
let domain_participant = DomainParticipant::new(0).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

while let Ok(Some(data)) = data_reader.read_next_sample() {
  // do something
}

Takes next unread sample

Examples
let domain_participant = DomainParticipant::new(0).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

while let Ok(Some(data)) = data_reader.take_next_sample() {
  // do something
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

for data in data_reader.iterator() {
  // do something
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

for data in data_reader.conditional_iterator(ReadCondition::any()) {
  // do something
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

for data in data_reader.into_iterator() {
  // do something
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, None).unwrap();

// Wait for data to arrive...

for data in data_reader.into_conditional_iterator(ReadCondition::not_read()) {
  // do something
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, 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
  }
}

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).unwrap();
let qos = QosPolicyBuilder::new().build();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

// WithKey is important
let topic = domain_participant.create_topic("some_topic".to_string(), "SomeType".to_string(), &qos, TopicKind::WithKey).unwrap();
let mut data_reader = subscriber.create_datareader::<SomeType, CDRDeserializerAdapter<_>>(&topic, 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
  }
}

Return values: true - got all historical data false - timeout before all historical data was received

Trait Implementations

Executes the destructor for this type. Read more

Register self with the given Poll instance. Read more

Re-register self with the given Poll instance. Read more

Deregister self from the given Poll instance Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.