Skip to main content

zerodds_dcps/
qos.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! DCPS-QoS — komplette 22-Policy-Sets fuer DataWriter/DataReader/Topic/
4//! Publisher/Subscriber/DomainParticipant gemaess DDS 1.4 §2.2.3.
5//!
6//! Re-Exports der Policy-Datentypen aus dem `zerodds_qos`-Crate; die hier
7//! definierten Aggregate sind die DCPS-API-Sicht (was DataReader/Writer
8//! intern halten und worauf der Runtime-Pfad zugreift).
9
10pub 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,
16    ReaderDataLifecycleQosPolicy, ReliabilityKind, ReliabilityQosPolicy, ResourceLimitsQosPolicy,
17    TimeBasedFilterQosPolicy, TopicDataQosPolicy, TransportPriorityQosPolicy, UserDataQosPolicy,
18    WriterDataLifecycleQosPolicy,
19};
20
21use zerodds_qos::Duration;
22
23/// QoS-Set fuer einen `DataWriter` — Spec §2.2.2.4.2 (alle Policies, die
24/// am DataWriter setzbar sind).
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct DataWriterQos {
27    /// Reliability — Default Reliable.
28    pub reliability: ReliabilityQosPolicy,
29    /// Durability — Default Volatile.
30    pub durability: DurabilityQosPolicy,
31    /// Konfiguriert den Persistence-Service (Spec §2.2.3.5).
32    pub durability_service: DurabilityServiceQosPolicy,
33    /// Deadline — Default INFINITE.
34    pub deadline: DeadlineQosPolicy,
35    /// LatencyBudget — Hint, kein Match-Effekt (Spec §2.2.3.10).
36    pub latency_budget: LatencyBudgetQosPolicy,
37    /// Liveliness — Default Automatic / INFINITE.
38    pub liveliness: LivelinessQosPolicy,
39    /// DestinationOrder — Default ByReceptionTimestamp.
40    pub destination_order: DestinationOrderQosPolicy,
41    /// Lifespan — Default INFINITE.
42    pub lifespan: LifespanQosPolicy,
43    /// Ownership — Default Shared.
44    pub ownership: OwnershipQosPolicy,
45    /// Ownership-Strength — nur bei Exclusive.
46    pub ownership_strength: OwnershipStrengthQosPolicy,
47    /// Partition — Default leer (matched only ""-Default-Partition).
48    pub partition: PartitionQosPolicy,
49    /// Presentation — Default Instance/false/false.
50    pub presentation: PresentationQosPolicy,
51    /// History — Default KeepLast(1).
52    pub history: HistoryQosPolicy,
53    /// Resource-Limits.
54    pub resource_limits: ResourceLimitsQosPolicy,
55    /// TransportPriority — Hint, kein Match-Effekt (Spec §2.2.3.15).
56    pub transport_priority: TransportPriorityQosPolicy,
57    /// WriterDataLifecycle — autodispose_unregistered_instances.
58    pub writer_data_lifecycle: WriterDataLifecycleQosPolicy,
59    /// UserData — opaque `sequence<octet>`, ueber Discovery propagiert.
60    pub user_data: UserDataQosPolicy,
61    /// TopicData — opaque `sequence<octet>`, ueber Discovery propagiert.
62    pub topic_data: TopicDataQosPolicy,
63    /// GroupData — opaque `sequence<octet>`, ueber Discovery propagiert.
64    pub group_data: GroupDataQosPolicy,
65}
66
67impl Default for DataWriterQos {
68    fn default() -> Self {
69        Self {
70            reliability: ReliabilityQosPolicy {
71                kind: ReliabilityKind::Reliable,
72                max_blocking_time: Duration::from_millis(100_i32),
73            },
74            durability: DurabilityQosPolicy {
75                kind: DurabilityKind::Volatile,
76            },
77            durability_service: DurabilityServiceQosPolicy::default(),
78            deadline: DeadlineQosPolicy::default(),
79            latency_budget: LatencyBudgetQosPolicy::default(),
80            liveliness: LivelinessQosPolicy::default(),
81            destination_order: DestinationOrderQosPolicy::default(),
82            lifespan: LifespanQosPolicy::default(),
83            ownership: OwnershipQosPolicy::default(),
84            ownership_strength: OwnershipStrengthQosPolicy::default(),
85            partition: PartitionQosPolicy::default(),
86            presentation: PresentationQosPolicy::default(),
87            history: HistoryQosPolicy {
88                kind: HistoryKind::KeepLast,
89                depth: 1,
90            },
91            resource_limits: ResourceLimitsQosPolicy {
92                max_samples: 1000_i32,
93                max_instances: 10_i32,
94                max_samples_per_instance: 100_i32,
95            },
96            transport_priority: TransportPriorityQosPolicy::default(),
97            writer_data_lifecycle: WriterDataLifecycleQosPolicy::default(),
98            user_data: UserDataQosPolicy::default(),
99            topic_data: TopicDataQosPolicy::default(),
100            group_data: GroupDataQosPolicy::default(),
101        }
102    }
103}
104
105/// QoS-Set fuer einen `DataReader` — Spec §2.2.2.5.2.
106#[derive(Debug, Clone, PartialEq, Eq)]
107pub struct DataReaderQos {
108    /// Reliability — Reader-Default BestEffort (Spec §2.2.3.14.3).
109    pub reliability: ReliabilityQosPolicy,
110    /// Durability — Default Volatile.
111    pub durability: DurabilityQosPolicy,
112    /// Deadline — Default INFINITE.
113    pub deadline: DeadlineQosPolicy,
114    /// LatencyBudget — Hint, kein Match-Effekt.
115    pub latency_budget: LatencyBudgetQosPolicy,
116    /// Liveliness — Default Automatic / INFINITE.
117    pub liveliness: LivelinessQosPolicy,
118    /// DestinationOrder — Default ByReceptionTimestamp.
119    pub destination_order: DestinationOrderQosPolicy,
120    /// Ownership — Default Shared.
121    pub ownership: OwnershipQosPolicy,
122    /// Partition — Default leer.
123    pub partition: PartitionQosPolicy,
124    /// Presentation.
125    pub presentation: PresentationQosPolicy,
126    /// History — Default KeepLast(1).
127    pub history: HistoryQosPolicy,
128    /// Resource-Limits.
129    pub resource_limits: ResourceLimitsQosPolicy,
130    /// TimeBasedFilter — minimum_separation pro Instanz.
131    pub time_based_filter: TimeBasedFilterQosPolicy,
132    /// ReaderDataLifecycle — autopurge-Delays.
133    pub reader_data_lifecycle: ReaderDataLifecycleQosPolicy,
134    /// UserData (Discovery-propagiert).
135    pub user_data: UserDataQosPolicy,
136    /// TopicData (Discovery-propagiert).
137    pub topic_data: TopicDataQosPolicy,
138    /// GroupData (Discovery-propagiert).
139    pub group_data: GroupDataQosPolicy,
140}
141
142impl Default for DataReaderQos {
143    fn default() -> Self {
144        Self {
145            reliability: ReliabilityQosPolicy {
146                kind: ReliabilityKind::BestEffort,
147                max_blocking_time: Duration::from_millis(100_i32),
148            },
149            durability: DurabilityQosPolicy {
150                kind: DurabilityKind::Volatile,
151            },
152            deadline: DeadlineQosPolicy::default(),
153            latency_budget: LatencyBudgetQosPolicy::default(),
154            liveliness: LivelinessQosPolicy::default(),
155            destination_order: DestinationOrderQosPolicy::default(),
156            ownership: OwnershipQosPolicy::default(),
157            partition: PartitionQosPolicy::default(),
158            presentation: PresentationQosPolicy::default(),
159            history: HistoryQosPolicy {
160                kind: HistoryKind::KeepLast,
161                depth: 1,
162            },
163            resource_limits: ResourceLimitsQosPolicy {
164                max_samples: 1000_i32,
165                max_instances: 10_i32,
166                max_samples_per_instance: 100_i32,
167            },
168            time_based_filter: TimeBasedFilterQosPolicy::default(),
169            reader_data_lifecycle: ReaderDataLifecycleQosPolicy::default(),
170            user_data: UserDataQosPolicy::default(),
171            topic_data: TopicDataQosPolicy::default(),
172            group_data: GroupDataQosPolicy::default(),
173        }
174    }
175}
176
177/// QoS-Set fuer einen `Topic` — Spec §2.2.2.3.2.
178#[derive(Debug, Clone, PartialEq, Eq, Default)]
179pub struct TopicQos {
180    /// Default-Durability des Topics.
181    pub durability: DurabilityQosPolicy,
182    /// DurabilityService-Default des Topics.
183    pub durability_service: DurabilityServiceQosPolicy,
184    /// Default-Deadline.
185    pub deadline: DeadlineQosPolicy,
186    /// Default-LatencyBudget.
187    pub latency_budget: LatencyBudgetQosPolicy,
188    /// Default-Liveliness.
189    pub liveliness: LivelinessQosPolicy,
190    /// Default-Reliability.
191    pub reliability: ReliabilityQosPolicy,
192    /// Default-DestinationOrder.
193    pub destination_order: DestinationOrderQosPolicy,
194    /// Default-History.
195    pub history: HistoryQosPolicy,
196    /// Default-Resource-Limits.
197    pub resource_limits: ResourceLimitsQosPolicy,
198    /// Default-TransportPriority.
199    pub transport_priority: TransportPriorityQosPolicy,
200    /// Default-Lifespan.
201    pub lifespan: LifespanQosPolicy,
202    /// Default-Ownership.
203    pub ownership: OwnershipQosPolicy,
204    /// TopicData (Discovery-propagiert).
205    pub topic_data: TopicDataQosPolicy,
206}
207
208/// QoS-Set fuer den `DomainParticipant` — Spec §2.2.2.2.2.
209#[derive(Debug, Clone, PartialEq, Eq, Default)]
210pub struct DomainParticipantQos {
211    /// UserData (Discovery-propagiert).
212    pub user_data: UserDataQosPolicy,
213    /// EntityFactory — Auto-Enable von Child-Entities.
214    pub entity_factory: EntityFactoryQosPolicy,
215}
216
217/// QoS-Set fuer den `Publisher` — Spec §2.2.2.4.1.
218#[derive(Debug, Clone, PartialEq, Eq, Default)]
219pub struct PublisherQos {
220    /// Presentation — Coherent/Ordered Access.
221    pub presentation: PresentationQosPolicy,
222    /// Partition — Default leer.
223    pub partition: PartitionQosPolicy,
224    /// GroupData (Discovery-propagiert).
225    pub group_data: GroupDataQosPolicy,
226    /// EntityFactory — Auto-Enable von DataWritern.
227    pub entity_factory: EntityFactoryQosPolicy,
228}
229
230/// QoS-Set fuer den `Subscriber` — Spec §2.2.2.5.1.
231#[derive(Debug, Clone, PartialEq, Eq, Default)]
232pub struct SubscriberQos {
233    /// Presentation — Coherent/Ordered Access.
234    pub presentation: PresentationQosPolicy,
235    /// Partition — Default leer.
236    pub partition: PartitionQosPolicy,
237    /// GroupData (Discovery-propagiert).
238    pub group_data: GroupDataQosPolicy,
239    /// EntityFactory — Auto-Enable von DataReadern.
240    pub entity_factory: EntityFactoryQosPolicy,
241}