1pub use zerodds_qos::{
11 DeadlineQosPolicy, DestinationOrderKind, DestinationOrderQosPolicy, DurabilityKind,
12 DurabilityQosPolicy, DurabilityServiceQosPolicy, EntityFactoryQosPolicy, GroupDataQosPolicy,
13 HistoryKind, HistoryQosPolicy, LatencyBudgetQosPolicy, LifespanQosPolicy, LivelinessKind,
14 LivelinessQosPolicy, OwnershipKind, OwnershipQosPolicy, OwnershipStrengthQosPolicy,
15 PartitionQosPolicy, PresentationAccessScope, PresentationQosPolicy, PropertyQosPolicy,
16 ReaderDataLifecycleQosPolicy, ReliabilityKind, ReliabilityQosPolicy, ResourceLimitsQosPolicy,
17 TimeBasedFilterQosPolicy, TopicDataQosPolicy, TransportPriorityQosPolicy, UserDataQosPolicy,
18 WriterDataLifecycleQosPolicy,
19};
20
21use zerodds_qos::Duration;
22
23#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct DataWriterQos {
27 pub reliability: ReliabilityQosPolicy,
29 pub durability: DurabilityQosPolicy,
31 pub durability_service: DurabilityServiceQosPolicy,
33 pub deadline: DeadlineQosPolicy,
35 pub latency_budget: LatencyBudgetQosPolicy,
37 pub liveliness: LivelinessQosPolicy,
39 pub destination_order: DestinationOrderQosPolicy,
41 pub lifespan: LifespanQosPolicy,
43 pub ownership: OwnershipQosPolicy,
45 pub ownership_strength: OwnershipStrengthQosPolicy,
47 pub partition: PartitionQosPolicy,
49 pub presentation: PresentationQosPolicy,
51 pub history: HistoryQosPolicy,
53 pub resource_limits: ResourceLimitsQosPolicy,
55 pub transport_priority: TransportPriorityQosPolicy,
57 pub writer_data_lifecycle: WriterDataLifecycleQosPolicy,
59 pub user_data: UserDataQosPolicy,
61 pub topic_data: TopicDataQosPolicy,
63 pub group_data: GroupDataQosPolicy,
65 pub data_representation: Option<alloc::vec::Vec<i16>>,
71}
72
73impl Default for DataWriterQos {
74 fn default() -> Self {
75 Self {
76 reliability: ReliabilityQosPolicy {
77 kind: ReliabilityKind::Reliable,
78 max_blocking_time: Duration::from_millis(100_i32),
79 },
80 durability: DurabilityQosPolicy {
81 kind: DurabilityKind::Volatile,
82 },
83 durability_service: DurabilityServiceQosPolicy::default(),
84 deadline: DeadlineQosPolicy::default(),
85 latency_budget: LatencyBudgetQosPolicy::default(),
86 liveliness: LivelinessQosPolicy::default(),
87 destination_order: DestinationOrderQosPolicy::default(),
88 lifespan: LifespanQosPolicy::default(),
89 ownership: OwnershipQosPolicy::default(),
90 ownership_strength: OwnershipStrengthQosPolicy::default(),
91 partition: PartitionQosPolicy::default(),
92 presentation: PresentationQosPolicy::default(),
93 history: HistoryQosPolicy {
94 kind: HistoryKind::KeepLast,
95 depth: 1,
96 },
97 resource_limits: ResourceLimitsQosPolicy {
98 max_samples: 1000_i32,
99 max_instances: 10_i32,
100 max_samples_per_instance: 100_i32,
101 },
102 transport_priority: TransportPriorityQosPolicy::default(),
103 writer_data_lifecycle: WriterDataLifecycleQosPolicy::default(),
104 user_data: UserDataQosPolicy::default(),
105 topic_data: TopicDataQosPolicy::default(),
106 group_data: GroupDataQosPolicy::default(),
107 data_representation: None,
108 }
109 }
110}
111
112#[derive(Debug, Clone, PartialEq, Eq)]
114pub struct DataReaderQos {
115 pub reliability: ReliabilityQosPolicy,
117 pub durability: DurabilityQosPolicy,
119 pub deadline: DeadlineQosPolicy,
121 pub latency_budget: LatencyBudgetQosPolicy,
123 pub liveliness: LivelinessQosPolicy,
125 pub destination_order: DestinationOrderQosPolicy,
127 pub ownership: OwnershipQosPolicy,
129 pub partition: PartitionQosPolicy,
131 pub presentation: PresentationQosPolicy,
133 pub history: HistoryQosPolicy,
135 pub resource_limits: ResourceLimitsQosPolicy,
137 pub time_based_filter: TimeBasedFilterQosPolicy,
139 pub reader_data_lifecycle: ReaderDataLifecycleQosPolicy,
141 pub user_data: UserDataQosPolicy,
143 pub topic_data: TopicDataQosPolicy,
145 pub group_data: GroupDataQosPolicy,
147 pub data_representation: Option<alloc::vec::Vec<i16>>,
152}
153
154impl Default for DataReaderQos {
155 fn default() -> Self {
156 Self {
157 reliability: ReliabilityQosPolicy {
158 kind: ReliabilityKind::BestEffort,
159 max_blocking_time: Duration::from_millis(100_i32),
160 },
161 durability: DurabilityQosPolicy {
162 kind: DurabilityKind::Volatile,
163 },
164 deadline: DeadlineQosPolicy::default(),
165 latency_budget: LatencyBudgetQosPolicy::default(),
166 liveliness: LivelinessQosPolicy::default(),
167 destination_order: DestinationOrderQosPolicy::default(),
168 ownership: OwnershipQosPolicy::default(),
169 partition: PartitionQosPolicy::default(),
170 presentation: PresentationQosPolicy::default(),
171 history: HistoryQosPolicy {
172 kind: HistoryKind::KeepLast,
173 depth: 1,
174 },
175 resource_limits: ResourceLimitsQosPolicy {
176 max_samples: 1000_i32,
177 max_instances: 10_i32,
178 max_samples_per_instance: 100_i32,
179 },
180 time_based_filter: TimeBasedFilterQosPolicy::default(),
181 reader_data_lifecycle: ReaderDataLifecycleQosPolicy::default(),
182 user_data: UserDataQosPolicy::default(),
183 topic_data: TopicDataQosPolicy::default(),
184 group_data: GroupDataQosPolicy::default(),
185 data_representation: None,
186 }
187 }
188}
189
190#[derive(Debug, Clone, PartialEq, Eq, Default)]
192pub struct TopicQos {
193 pub durability: DurabilityQosPolicy,
195 pub durability_service: DurabilityServiceQosPolicy,
197 pub deadline: DeadlineQosPolicy,
199 pub latency_budget: LatencyBudgetQosPolicy,
201 pub liveliness: LivelinessQosPolicy,
203 pub reliability: ReliabilityQosPolicy,
205 pub destination_order: DestinationOrderQosPolicy,
207 pub history: HistoryQosPolicy,
209 pub resource_limits: ResourceLimitsQosPolicy,
211 pub transport_priority: TransportPriorityQosPolicy,
213 pub lifespan: LifespanQosPolicy,
215 pub ownership: OwnershipQosPolicy,
217 pub topic_data: TopicDataQosPolicy,
219}
220
221#[derive(Debug, Clone, PartialEq, Eq, Default)]
223pub struct DomainParticipantQos {
224 pub user_data: UserDataQosPolicy,
226 pub entity_factory: EntityFactoryQosPolicy,
228 pub property: PropertyQosPolicy,
231}
232
233#[derive(Debug, Clone, PartialEq, Eq, Default)]
235pub struct PublisherQos {
236 pub presentation: PresentationQosPolicy,
238 pub partition: PartitionQosPolicy,
240 pub group_data: GroupDataQosPolicy,
242 pub entity_factory: EntityFactoryQosPolicy,
244}
245
246#[derive(Debug, Clone, PartialEq, Eq, Default)]
248pub struct SubscriberQos {
249 pub presentation: PresentationQosPolicy,
251 pub partition: PartitionQosPolicy,
253 pub group_data: GroupDataQosPolicy,
255 pub entity_factory: EntityFactoryQosPolicy,
257}
258
259impl From<zerodds_qos::WriterQos> for DataWriterQos {
265 fn from(w: zerodds_qos::WriterQos) -> Self {
266 Self {
267 durability: w.durability,
268 durability_service: w.durability_service,
269 deadline: w.deadline,
270 latency_budget: w.latency_budget,
271 liveliness: w.liveliness,
272 reliability: w.reliability,
273 destination_order: w.destination_order,
274 history: w.history,
275 resource_limits: w.resource_limits,
276 transport_priority: w.transport_priority,
277 lifespan: w.lifespan,
278 ownership: w.ownership,
279 ownership_strength: w.ownership_strength,
280 presentation: w.presentation,
281 partition: w.partition,
282 writer_data_lifecycle: w.writer_data_lifecycle,
283 user_data: w.user_data,
284 topic_data: w.topic_data,
285 group_data: w.group_data,
286 ..Self::default()
287 }
288 }
289}
290
291impl From<zerodds_qos::ReaderQos> for DataReaderQos {
294 fn from(r: zerodds_qos::ReaderQos) -> Self {
295 Self {
296 durability: r.durability,
297 deadline: r.deadline,
298 latency_budget: r.latency_budget,
299 liveliness: r.liveliness,
300 reliability: r.reliability,
301 destination_order: r.destination_order,
302 history: r.history,
303 resource_limits: r.resource_limits,
304 ownership: r.ownership,
305 time_based_filter: r.time_based_filter,
306 presentation: r.presentation,
307 partition: r.partition,
308 reader_data_lifecycle: r.reader_data_lifecycle,
309 user_data: r.user_data,
310 topic_data: r.topic_data,
311 group_data: r.group_data,
312 ..Self::default()
313 }
314 }
315}
316
317#[cfg(test)]
318mod data_representation_tests {
319 use super::{DataReaderQos, DataWriterQos};
320
321 #[test]
322 fn data_representation_defaults_none_and_settable() {
323 assert_eq!(DataWriterQos::default().data_representation, None);
326 assert_eq!(DataReaderQos::default().data_representation, None);
327 let r = DataReaderQos {
328 data_representation: Some(alloc::vec![0_i16, 2]), ..Default::default()
330 };
331 assert_eq!(r.data_representation.as_deref(), Some(&[0_i16, 2][..]));
332 let w = DataWriterQos {
333 data_representation: Some(alloc::vec![0_i16]), ..Default::default()
335 };
336 assert_eq!(w.data_representation.as_deref(), Some(&[0_i16][..]));
337 }
338
339 #[test]
340 fn from_qos_aggregate_carries_policies() {
341 use zerodds_qos::{HistoryKind, ReliabilityKind};
342 let mut w = zerodds_qos::WriterQos::default();
343 w.history.kind = HistoryKind::KeepLast;
344 w.history.depth = 42;
345 w.reliability.kind = ReliabilityKind::Reliable;
346 let dw: DataWriterQos = w.into();
347 assert_eq!(dw.history.depth, 42);
348 assert_eq!(dw.reliability.kind, ReliabilityKind::Reliable);
349 assert_eq!(dw.data_representation, None); let mut rq = zerodds_qos::ReaderQos::default();
352 rq.history.depth = 7;
353 let dr: DataReaderQos = rq.into();
354 assert_eq!(dr.history.depth, 7);
355 assert_eq!(dr.data_representation, None);
356 }
357}