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};