#![cfg_attr(not(feature = "std"), no_std)]
#![deny(unsafe_code)]
#![warn(missing_docs)]
#[cfg(feature = "alloc")]
extern crate alloc;
pub mod builtin_subscriber;
pub mod builtin_topics;
pub mod coherent_set;
#[cfg(feature = "std")]
pub mod condition;
pub mod dds_type;
#[cfg(feature = "std")]
pub mod durability_service;
pub mod entity;
pub mod error;
pub mod factory;
#[cfg(all(feature = "std", feature = "flatdata-integration"))]
pub mod flatdata_integration;
pub mod instance_handle;
#[cfg(feature = "std")]
pub mod instance_tracker;
#[cfg(feature = "alloc")]
pub mod interop;
pub mod listener;
#[cfg(feature = "std")]
pub mod listener_dispatch;
#[cfg(feature = "metrics")]
pub mod metrics;
pub mod participant;
pub mod psm_constants;
pub mod publisher;
pub mod qos;
#[cfg(feature = "std")]
pub mod runtime;
pub mod sample;
pub mod sample_info;
pub mod status;
pub mod subscriber;
pub mod time;
pub mod topic;
#[cfg(feature = "std")]
pub mod wlp;
pub use builtin_subscriber::{BuiltinSinks, BuiltinSubscriber, BuiltinTopic, builtin_reader_qos};
pub use builtin_topics::{
ParticipantBuiltinTopicData as DcpsParticipantBuiltinTopicData,
PublicationBuiltinTopicData as DcpsPublicationBuiltinTopicData,
SubscriptionBuiltinTopicData as DcpsSubscriptionBuiltinTopicData, TOPIC_NAME_DCPS_PARTICIPANT,
TOPIC_NAME_DCPS_PUBLICATION, TOPIC_NAME_DCPS_SUBSCRIPTION, TOPIC_NAME_DCPS_TOPIC,
TopicBuiltinTopicData as DcpsTopicBuiltinTopicData,
};
pub use dds_type::{
DdsType, DdsTypeRow, DecodeError, EncodeError, Extensibility, ExtensibilityKind, RawBytes,
};
pub use entity::{Entity, EntityState, StatusCondition, StatusMask, immutable_if_enabled};
pub use coherent_set::{CoherentScope, CoherentSetMarker, GroupAccessScope};
#[cfg(feature = "std")]
pub use condition::{Condition, GuardCondition, QueryCondition, ReadCondition, WaitSet};
pub use error::{DdsError, Result};
pub use factory::DomainParticipantFactory;
pub use instance_handle::{HANDLE_NIL, InstanceHandle, InstanceHandleAllocator};
#[cfg(feature = "std")]
pub use instance_tracker::{InstanceState, InstanceTracker, KeyHash};
#[cfg(feature = "std")]
pub use participant::IgnoreFilter;
pub use participant::{DomainId, DomainParticipant};
pub use publisher::{DataWriter, Publisher};
pub use qos::{
DataReaderQos, DataWriterQos, DomainParticipantQos, PublisherQos, SubscriberQos, TopicQos,
};
pub use sample::Sample;
pub use sample_info::{
InstanceStateKind, SampleInfo, SampleStateKind, ViewStateKind, instance_state_mask,
sample_state_mask, view_state_mask,
};
pub use subscriber::{DataReader, Subscriber};
pub use time::{Duration, Time, get_current_time};
#[cfg(feature = "std")]
pub use topic::hash_join_two;
pub use topic::{
ContentFilteredTopic, JoinedRow, MultiTopic, Topic, TopicDescription, TopicDescriptionHandle,
};
#[cfg(test)]
#[allow(clippy::expect_used, clippy::unwrap_used)]
mod tests {
use super::*;
#[test]
fn end_to_end_in_process_loopback() {
let factory = DomainParticipantFactory::instance();
let p = factory.create_participant_offline(0, DomainParticipantQos::default());
let topic = p
.create_topic::<RawBytes>("Chatter", TopicQos::default())
.unwrap();
let pub_ = p.create_publisher(PublisherQos::default());
let w = pub_
.create_datawriter::<RawBytes>(&topic, DataWriterQos::default())
.unwrap();
let sub = p.create_subscriber(SubscriberQos::default());
let r = sub
.create_datareader::<RawBytes>(&topic, DataReaderQos::default())
.unwrap();
w.write(&RawBytes::new(vec![1, 2, 3])).unwrap();
w.write(&RawBytes::new(vec![4, 5])).unwrap();
for bytes in w.__drain_pending() {
r.__push_raw(bytes).unwrap();
}
let samples = r.take().unwrap();
assert_eq!(samples.len(), 2);
assert_eq!(samples[0].data, vec![1, 2, 3]);
assert_eq!(samples[1].data, vec![4, 5]);
}
}