rustdds 0.11.8

Native Rust DDS implementation with RTPS
Documentation
pub(crate) mod random_data;
pub(crate) mod shape_type;
pub(crate) mod test_data;
pub(crate) mod test_properties;

use std::{thread, time::Duration};

use anyhow::Result;

use crate::{
  policy::{Durability, History, Reliability},
  DomainParticipant, QosPolicyBuilder, Timestamp, TopicKind,
};

#[derive(serde::Serialize, serde::Deserialize, Debug)]
struct TestType;

#[test]
fn timestamp() -> Result<()> {
  let participant = DomainParticipant::new(0)?;
  let qos = QosPolicyBuilder::new()
    .history(History::KeepAll)
    .reliability(Reliability::Reliable {
      max_blocking_time: Duration::from_secs(0).into(),
    })
    .durability(Durability::TransientLocal)
    .build();
  let p1_topic = participant.create_topic(
    "test".to_string(),
    "TestType".to_string(),
    &qos,
    TopicKind::NoKey,
  )?;
  let writer = participant
    .create_publisher(&qos)?
    .create_datawriter_no_key_cdr::<TestType>(&p1_topic, None)?;
  let participant2 = DomainParticipant::new(0)?;
  let p2_topic = participant2.create_topic(
    "test".to_string(),
    "TestType".to_string(),
    &qos,
    TopicKind::NoKey,
  )?;
  let mut reader = participant2
    .create_subscriber(&qos)?
    .create_datareader_no_key_cdr::<TestType>(&p2_topic, None)?;
  let timestamp = Timestamp::now();
  writer.write(TestType, Some(timestamp))?;
  thread::sleep(Duration::from_secs(3));
  loop {
    if let Ok(Some(sample)) = reader.take_next_sample() {
      assert_eq!(timestamp, sample.sample_info().source_timestamp().unwrap());
      break;
    }
    thread::sleep(Duration::from_millis(100));
  }
  Ok(())
}