1#![cfg_attr(not(feature = "std"), no_std)]
64#![deny(unsafe_code)]
65#![warn(missing_docs)]
66
67#[cfg(feature = "alloc")]
68extern crate alloc;
69
70pub mod builtin_subscriber;
71pub mod builtin_topics;
72pub mod coherent_set;
73#[cfg(feature = "std")]
74pub mod condition;
75#[cfg(all(feature = "std", feature = "cyclone-iox", target_os = "linux"))]
77pub mod cyclone_iox_integration;
78pub mod dds_type;
79#[cfg(feature = "std")]
80pub mod durability_service;
81pub mod entity;
82pub mod error;
83pub mod factory;
84#[cfg(all(feature = "std", feature = "flatdata-integration"))]
86pub mod flatdata_integration;
87#[cfg(feature = "std")]
89mod inproc;
90pub mod instance_handle;
91#[cfg(feature = "std")]
92pub mod instance_tracker;
93#[cfg(feature = "alloc")]
94pub mod interop;
95#[cfg(feature = "std")]
97pub mod layered_transport;
98pub mod listener;
99#[cfg(feature = "std")]
100pub mod listener_dispatch;
101#[cfg(feature = "metrics")]
102pub mod metrics;
103pub mod participant;
104pub mod psm_constants;
105pub mod publisher;
106pub mod qos;
107#[cfg(feature = "std")]
108pub mod runtime;
109pub mod same_host;
110#[cfg(all(feature = "std", feature = "same-host-shm"))]
114pub mod same_host_shm;
115#[cfg(all(feature = "std", feature = "same-host-uds"))]
119pub mod same_host_uds;
120pub mod sample;
121pub mod sample_bytes;
122pub mod sample_info;
123#[cfg(feature = "std")]
126pub mod scheduler;
127#[cfg(all(feature = "std", feature = "same-host-shm"))]
132pub mod shm_user;
133pub mod status;
134pub mod subscriber;
135pub mod time;
136pub mod topic;
137#[cfg(feature = "std")]
138pub mod wlp;
139
140pub use builtin_subscriber::{BuiltinSinks, BuiltinSubscriber, BuiltinTopic, builtin_reader_qos};
142pub use builtin_topics::{
143 ParticipantBuiltinTopicData as DcpsParticipantBuiltinTopicData,
144 PublicationBuiltinTopicData as DcpsPublicationBuiltinTopicData,
145 SubscriptionBuiltinTopicData as DcpsSubscriptionBuiltinTopicData, TOPIC_NAME_DCPS_PARTICIPANT,
146 TOPIC_NAME_DCPS_PUBLICATION, TOPIC_NAME_DCPS_SUBSCRIPTION, TOPIC_NAME_DCPS_TOPIC,
147 TopicBuiltinTopicData as DcpsTopicBuiltinTopicData,
148};
149pub use dds_type::{
150 DdsType, DdsTypeRow, DecodeError, EncodeError, Extensibility, ExtensibilityKind, RawBytes,
151};
152pub use entity::{Entity, EntityState, StatusCondition, StatusMask, immutable_if_enabled};
153
154pub use coherent_set::{CoherentScope, CoherentSetMarker, GroupAccessScope};
155#[cfg(feature = "std")]
156pub use condition::{Condition, GuardCondition, QueryCondition, ReadCondition, WaitSet};
157pub use error::{DdsError, Result};
158pub use factory::DomainParticipantFactory;
159pub use instance_handle::{HANDLE_NIL, InstanceHandle, InstanceHandleAllocator};
160#[cfg(feature = "std")]
161pub use instance_tracker::{InstanceState, InstanceTracker, KeyHash};
162#[cfg(feature = "std")]
163pub use participant::IgnoreFilter;
164pub use participant::{DomainId, DomainParticipant};
165pub use publisher::{DataWriter, Publisher};
166pub use qos::{
167 DataReaderQos, DataWriterQos, DomainParticipantQos, PublisherQos, SubscriberQos, TopicQos,
168};
169pub use sample::Sample;
170pub use sample_info::{
171 InstanceStateKind, SampleInfo, SampleStateKind, ViewStateKind, instance_state_mask,
172 sample_state_mask, view_state_mask,
173};
174pub use subscriber::{DataReader, Subscriber};
175pub use time::{Duration, Time, get_current_time};
176#[cfg(feature = "std")]
177pub use topic::hash_join_two;
178pub use topic::{
179 ContentFilteredTopic, JoinedRow, MultiTopic, Topic, TopicDescription, TopicDescriptionHandle,
180};
181
182#[cfg(test)]
183#[allow(clippy::expect_used, clippy::unwrap_used)]
184mod tests {
185 use super::*;
186
187 #[test]
188 fn end_to_end_in_process_loopback() {
189 let factory = DomainParticipantFactory::instance();
194 let p = factory.create_participant_offline(0, DomainParticipantQos::default());
195 let topic = p
196 .create_topic::<RawBytes>("Chatter", TopicQos::default())
197 .unwrap();
198
199 let pub_ = p.create_publisher(PublisherQos::default());
200 let w = pub_
201 .create_datawriter::<RawBytes>(&topic, DataWriterQos::default())
202 .unwrap();
203
204 let sub = p.create_subscriber(SubscriberQos::default());
205 let r = sub
206 .create_datareader::<RawBytes>(&topic, DataReaderQos::default())
207 .unwrap();
208
209 w.write(&RawBytes::new(vec![1, 2, 3])).unwrap();
210 w.write(&RawBytes::new(vec![4, 5])).unwrap();
211 for bytes in w.__drain_pending() {
214 r.__push_raw(bytes).unwrap();
215 }
216 let samples = r.take().unwrap();
217 assert_eq!(samples.len(), 2);
218 assert_eq!(samples[0].data, vec![1, 2, 3]);
219 assert_eq!(samples[1].data, vec![4, 5]);
220 }
221}