zerodds-qos

Layer 1 — Primitives. DDS QoS policies + compatibility matrix + exclusive-ownership resolver + PL_CDR_LE PID wire codec.

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)

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.

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)

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.