Skip to main content

zerodds_qos/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! Crate `zerodds-qos`. Safety classification: **SAFE**.
4//!
5//! DDS QoS-Policies (DDS 1.4 §2.2.3) + Request/Offered-Compatibility-Matrix
6//! + PL_CDR_LE PID-Wire-Codec (DDSI-RTPS §9.6.3.2). Pure-Rust no_std + alloc.
7//!
8//! ## Spec
9//!
10//! - **DDS 1.4** §2.2.3 — alle 22 Standard-Policies (Durability, Reliability,
11//!   Liveliness, Ownership, Partition, …) inkl. §2.2.3.23
12//!   Exclusive-Ownership-Resolver-Logik (§2.2.2.5.5).
13//! - **DDS 1.4** §2.2.3 Table "QoS compatibility" — Request/Offered-Matrix
14//!   ([`check_compatibility`]).
15//! - **DDSI-RTPS 2.5** §9.6.3.2 — Wire-PIDs fuer ParameterList-Encoding
16//!   ([`Pid`]).
17//!
18//! ## Schichten-Position
19//!
20//! Layer 1 — Primitives. Direkte Abhaengige: `zerodds-rtps`, `zerodds-discovery`,
21//! `zerodds-dcps`, `zerodds-dcps-async`, `zerodds-c-api`, `zerodds-rpc`, `zerodds-security-runtime`,
22//! `zerodds-xml`, `zerodds-zenoh-bridge`.
23//!
24//! ## Public API (Stand 1.0.0-rc.1)
25//!
26//! **Top-Level:**
27//! - [`Duration`] — DDS-Duration (sec + nanosec) fuer alle zeitbasierten Policies.
28//! - [`Pid`] — DDSI-RTPS §9.6.3.2 PID-Konstanten fuer QoS-Policy-Wire-Encoding.
29//! - [`CompatibilityResult`] / [`IncompatibleReason`] / [`check_compatibility`]
30//!   — Request/Offered-Matrix.
31//!
32//! **Policies-Modul** ([`policies`]):
33//! - 22 Standard-Policies: [`DurabilityQosPolicy`], [`DurabilityServiceQosPolicy`],
34//!   [`DeadlineQosPolicy`], [`LatencyBudgetQosPolicy`], [`LivelinessQosPolicy`],
35//!   [`ReliabilityQosPolicy`], [`DestinationOrderQosPolicy`], [`HistoryQosPolicy`],
36//!   [`ResourceLimitsQosPolicy`], [`TransportPriorityQosPolicy`], [`LifespanQosPolicy`],
37//!   [`UserDataQosPolicy`], [`OwnershipQosPolicy`], [`OwnershipStrengthQosPolicy`],
38//!   [`PresentationQosPolicy`], [`PartitionQosPolicy`], [`TopicDataQosPolicy`],
39//!   [`GroupDataQosPolicy`], [`TimeBasedFilterQosPolicy`],
40//!   [`ReaderDataLifecycleQosPolicy`], [`WriterDataLifecycleQosPolicy`],
41//!   [`EntityFactoryQosPolicy`].
42//! - QoS-Aggregate: [`ReaderQos`], [`WriterQos`].
43//! - Kind-Enums: [`DurabilityKind`], [`ReliabilityKind`], [`LivelinessKind`],
44//!   [`OwnershipKind`], [`HistoryKind`], [`DestinationOrderKind`],
45//!   [`PresentationAccessScope`].
46//!
47//! **Exclusive-Ownership-Resolver** ([`exclusive_ownership`]):
48//! - [`exclusive_ownership::OwnershipResolver`] /
49//!   [`exclusive_ownership::OwnershipCandidate`] /
50//!   [`exclusive_ownership::resolve_strongest`] —
51//!   DDS 1.4 §2.2.3.23 Strongest-Writer-Selection fuer DataReader.take()
52//!   bei Topics mit `Exclusive`-Ownership-QoS.
53//!
54//! ## Beispiel
55//!
56//! ```rust
57//! use zerodds_qos::{
58//!     ReliabilityKind, ReliabilityQosPolicy, ReaderQos, WriterQos,
59//!     check_compatibility, CompatibilityResult,
60//! };
61//!
62//! let mut writer_qos = WriterQos::default();
63//! writer_qos.reliability = ReliabilityQosPolicy { kind: ReliabilityKind::Reliable, ..Default::default() };
64//! let reader_qos = ReaderQos::default();
65//! // Reliable writer + BestEffort reader (default) sind kompatibel.
66//! assert!(matches!(check_compatibility(&writer_qos, &reader_qos), CompatibilityResult::Compatible));
67//! ```
68
69#![cfg_attr(not(feature = "std"), no_std)]
70#![forbid(unsafe_code)]
71#![warn(missing_docs)]
72
73// `zerodds-qos` setzt `alloc` zwingend voraus (Partition-Strings,
74// GenericData-Buffers, ResourceLimits-Vec, …). `zerodds-cdr` mit
75// `alloc`-Feature ist mandatory dep, also ist `extern crate alloc`
76// immer verfuegbar.
77extern crate alloc;
78
79pub mod compatibility;
80mod defaults;
81pub mod duration;
82pub mod exclusive_ownership;
83pub mod pid;
84pub mod policies;
85#[cfg(test)]
86mod review_tests;
87mod wire_helpers;
88
89pub use compatibility::{CompatibilityResult, IncompatibleReason};
90pub use duration::Duration;
91pub use pid::Pid;
92pub use policies::{
93    DeadlineQosPolicy, DestinationOrderKind, DestinationOrderQosPolicy, DurabilityKind,
94    DurabilityQosPolicy, DurabilityServiceQosPolicy, EntityFactoryQosPolicy, GroupDataQosPolicy,
95    HistoryKind, HistoryQosPolicy, LatencyBudgetQosPolicy, LifespanQosPolicy, LivelinessKind,
96    LivelinessQosPolicy, OwnershipKind, OwnershipQosPolicy, OwnershipStrengthQosPolicy,
97    PartitionQosPolicy, PresentationAccessScope, PresentationQosPolicy,
98    ReaderDataLifecycleQosPolicy, ReaderQos, ReliabilityKind, ReliabilityQosPolicy,
99    ResourceLimitsQosPolicy, TimeBasedFilterQosPolicy, TopicDataQosPolicy,
100    TransportPriorityQosPolicy, UserDataQosPolicy, WriterDataLifecycleQosPolicy, WriterQos,
101    check_compatibility,
102};