zerodds-qos
Layer 1 — Primitives. DDS QoS policies + compatibility matrix + exclusive-ownership resolver + PL_CDR_LE PID wire codec.
- Source: crates/qos
- API docs: docs.rs/zerodds-qos
zerodds-qos implements all 22 standard QoS policies from OMG DDS 1.4 §2.2.3, plus the request/offered compatibility matrix, plus the stateless exclusive-ownership resolver API for DDS 1.4 §2.2.3.23, plus the PID constants for the ParameterList wire codec from DDSI-RTPS §9.6.3.2.
Pure-Rust no_std + alloc, forbid(unsafe_code).
Cookbook
Recipes for common QoS setups: QoS cookbook →
Spec anchors
- OMG DDS 1.4 §2.2.3 — all 22 standard policies + compatibility matrix.
- OMG DDS 1.4 §2.2.3.23 / §2.2.2.5.5 — exclusive-ownership resolver.
- OMG DDSI-RTPS 2.5 §9.6.3.2 — wire PIDs for ParameterList.
Public API (selection)
- Full reference: docs.rs/zerodds-qos →
- Source: crates/qos →
- CHANGELOG: CHANGELOG
Top-level:
Duration— DDS Duration(seconds: i32, nanoseconds: u32)with zero/infinite constructors.Pid— newtype for the DDSI-RTPS §9.6.3.2 PID constants of the QoS-policy slice.CompatibilityResult::{Compatible, Incompatible(reasons)}+IncompatibleReason.check_compatibility(&WriterQos, &ReaderQos) -> CompatibilityResult.
22 standard policies (policies module + top-level re-export):
DurabilityQosPolicy, DurabilityServiceQosPolicy, DeadlineQosPolicy, LatencyBudgetQosPolicy, LivelinessQosPolicy, ReliabilityQosPolicy, DestinationOrderQosPolicy, HistoryQosPolicy, ResourceLimitsQosPolicy, TransportPriorityQosPolicy, LifespanQosPolicy, UserDataQosPolicy, TopicDataQosPolicy, GroupDataQosPolicy, OwnershipQosPolicy, OwnershipStrengthQosPolicy, PresentationQosPolicy, PartitionQosPolicy, TimeBasedFilterQosPolicy, ReaderDataLifecycleQosPolicy, WriterDataLifecycleQosPolicy, EntityFactoryQosPolicy.
QoS aggregates: ReaderQos, WriterQos.
Kind enums: DurabilityKind, ReliabilityKind, LivelinessKind, OwnershipKind, HistoryKind, DestinationOrderKind, PresentationAccessScope.
Exclusive-ownership resolver (exclusive_ownership module):
OwnershipResolver— state holder.OwnershipCandidate { guid, strength }— candidate entry.resolve_strongest(&[OwnershipCandidate]) -> Option<OwnershipCandidate>.WriterGuidBytes—[u8; 16]GUID alias.
Quick start
use zerodds_qos::{
ReliabilityKind, ReliabilityQosPolicy, ReaderQos, WriterQos,
check_compatibility, CompatibilityResult,
};
let mut writer_qos = WriterQos::default();
writer_qos.reliability = ReliabilityQosPolicy {
kind: ReliabilityKind::Reliable,
..Default::default()
};
let reader_qos = ReaderQos::default();
assert!(matches!(
check_compatibility(&writer_qos, &reader_qos),
CompatibilityResult::Compatible
));
Exclusive-ownership filter
zerodds-qos provides the resolver API; zerodds-dcps wires it into the DataReader::take()/read() path. For topics with OwnershipKind::Exclusive the subscriber filters samples from weaker writers (highest ownership_strength wins; tie-break by GUID lexicographically).
Feature flags
| Feature | Default | Purpose |
|---|---|---|
std |
✅ | std re-exports, implies alloc |
alloc |
✅ | mandatory (Vec/String); the feature stays for workspace consistency |
safety |
❌ | Reserved for safety-class hardening (Phase 2) |
Tests
cargo test -p zerodds-qos: 201 tests (199 unit + 1 compliance_qos_pid + 1 doctest). Wire roundtrip per policy against Cyclone DDS PL_CDR_LE golden vectors.
Stability
All public-API items are semver-stable from 1.0.0-rc.3.
zerodds-qos
Layer 1 — Primitives. DDS QoS-Policies + Compatibility-Matrix + Exclusive-Ownership-Resolver + PL_CDR_LE PID-Wire-Codec.
- Quelle: crates/qos
- API-Docs: docs.rs/zerodds-qos
zerodds-qos implementiert alle 22 Standard-QoS-Policies aus OMG DDS 1.4 §2.2.3, plus die Request/Offered-Compatibility-Matrix, plus die zustandslose Exclusive-Ownership-Resolver-API für DDS 1.4 §2.2.3.23, plus die PID-Konstanten für den ParameterList-Wire-Codec aus DDSI-RTPS §9.6.3.2.
Pure-Rust no_std + alloc, forbid(unsafe_code).
Cookbook
Rezepte für gängige QoS-Setups: QoS-Cookbook →
Spec-Anker
- OMG DDS 1.4 §2.2.3 — alle 22 Standard-Policies + Compatibility-Matrix.
- OMG DDS 1.4 §2.2.3.23 / §2.2.2.5.5 — Exclusive-Ownership-Resolver.
- OMG DDSI-RTPS 2.5 §9.6.3.2 — Wire-PIDs für ParameterList.
Public API (Auswahl)
- Vollständige Referenz: docs.rs/zerodds-qos →
- Quelle: crates/qos →
- CHANGELOG: CHANGELOG
Top-Level:
Duration— DDS-Duration(seconds: i32, nanoseconds: u32)mit Zero/Infinite-Konstruktoren.Pid— Newtype für DDSI-RTPS §9.6.3.2 PID-Konstanten der QoS-Policy-Slice.CompatibilityResult::{Compatible, Incompatible(reasons)}+IncompatibleReason.check_compatibility(&WriterQos, &ReaderQos) -> CompatibilityResult.
22 Standard-Policies (policies-Modul + Top-Level re-export):
DurabilityQosPolicy, DurabilityServiceQosPolicy, DeadlineQosPolicy, LatencyBudgetQosPolicy, LivelinessQosPolicy, ReliabilityQosPolicy, DestinationOrderQosPolicy, HistoryQosPolicy, ResourceLimitsQosPolicy, TransportPriorityQosPolicy, LifespanQosPolicy, UserDataQosPolicy, TopicDataQosPolicy, GroupDataQosPolicy, OwnershipQosPolicy, OwnershipStrengthQosPolicy, PresentationQosPolicy, PartitionQosPolicy, TimeBasedFilterQosPolicy, ReaderDataLifecycleQosPolicy, WriterDataLifecycleQosPolicy, EntityFactoryQosPolicy.
QoS-Aggregate: ReaderQos, WriterQos.
Kind-Enums: DurabilityKind, ReliabilityKind, LivelinessKind, OwnershipKind, HistoryKind, DestinationOrderKind, PresentationAccessScope.
Exclusive-Ownership-Resolver (exclusive_ownership-Modul):
OwnershipResolver— State-Holder.OwnershipCandidate { guid, strength }— Kandidat-Entry.resolve_strongest(&[OwnershipCandidate]) -> Option<OwnershipCandidate>.WriterGuidBytes—[u8; 16]GUID-Alias.
Quick Start
use zerodds_qos::{
ReliabilityKind, ReliabilityQosPolicy, ReaderQos, WriterQos,
check_compatibility, CompatibilityResult,
};
let mut writer_qos = WriterQos::default();
writer_qos.reliability = ReliabilityQosPolicy {
kind: ReliabilityKind::Reliable,
..Default::default()
};
let reader_qos = ReaderQos::default();
assert!(matches!(
check_compatibility(&writer_qos, &reader_qos),
CompatibilityResult::Compatible
));
Exclusive-Ownership-Filter
zerodds-qos stellt die Resolver-API bereit; zerodds-dcps wired sie in den DataReader::take()/read()-Pfad ein. Bei Topics mit OwnershipKind::Exclusive filtert der Subscriber Samples schwächerer Writer (höchste ownership_strength gewinnt; Tie-Break über GUID lexikografisch).
Feature-Flags
| Feature | Default | Zweck |
|---|---|---|
std |
✅ | std-Re-Exports, implies alloc |
alloc |
✅ | mandatory (Vec/String); Feature bleibt aus Workspace-Konsistenz |
safety |
❌ | Reserved für Safety-Class-Hardening (Phase-2) |
Tests
cargo test -p zerodds-qos: 201 Tests (199 unit + 1 compliance_qos_pid + 1 doctest). Wire-Roundtrip pro Policy gegen Cyclone-DDS-PL_CDR_LE-Golden-Vectors.
Stabilität
Alle Public-API-Items sind ab 1.0.0-rc.3 semver-stabil.