zerodds_discovery/lib.rs
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! Crate `zerodds-discovery`. Safety classification: **SAFE**.
4//!
5//! DDSI-RTPS-Discovery für ZeroDDS — SPDP, SEDP, TypeLookup-Service.
6//!
7//! ## Spec
8//!
9//! - **DDSI-RTPS 2.5 §8.5** — Simple Discovery Protocol (SPDP/SEDP).
10//! - **DDSI-RTPS 2.5 §8.5.3** — SPDP Builtin-Endpoints.
11//! - **DDSI-RTPS 2.5 §8.5.4** — SEDP Builtin-Endpoints.
12//! - **XTypes 1.3 §7.6.3.3.4** — TypeLookup-Service
13//! (`TL_SVC_REQ_{WRITER,READER}` + `TL_SVC_REPLY_{WRITER,READER}`).
14//! - **DDS-Security 1.2 §7.4.2** — Stateless + Volatile-Secure
15//! Builtin-Endpoints (sub-module `security`).
16//!
17//! ## Public API
18//!
19//! - [`spdp`] — SPDP Beacon-Sender + -Receiver +
20//! `DiscoveredParticipantsCache` mit `last_seen`-Lease-Tracking.
21//! - [`sedp`] — SEDP Stack (Cache, Reader, Writer).
22//! - [`type_lookup`] — TypeLookup-Service Server + Client +
23//! Builtin-Endpoint-GUIDs.
24//! - [`security`] — DDS-Security Stateless + Volatile-Secure
25//! Builtin-Endpoint-Slots.
26//! - [`capabilities::PeerCapabilities`] — DDSI-Capability-Bits.
27//!
28//! ## Wiring an DCPS-Runtime
29//!
30//! Die Discovery-Primitives sind wire-format-vollständig. Die
31//! Instantiierung der Builtin-Endpoint-Reliable-Writer/Reader-Pairs
32//! liegt im DCPS-Layer (`crates/dcps/src/runtime.rs`):
33//! - SPDP: Best-Effort Writer + Reader auf `ParticipantBuiltinTopicData`.
34//! - SEDP: Reliable Writer + Reader auf
35//! `Publication-/Subscription-BuiltinTopicData`.
36//! - TypeLookup: Reliable Writer + Reader auf `TypesRequest`/
37//! `TypesReply`-Topic mit Service-Instance-Name.
38
39#![no_std]
40#![forbid(unsafe_code)]
41#![warn(missing_docs)]
42
43#[cfg(feature = "alloc")]
44extern crate alloc;
45
46#[cfg(feature = "std")]
47extern crate std;
48
49#[cfg(feature = "alloc")]
50pub mod capabilities;
51#[cfg(feature = "metrics")]
52pub mod metrics;
53#[cfg(feature = "alloc")]
54pub mod security;
55#[cfg(feature = "alloc")]
56pub mod sedp;
57#[cfg(feature = "alloc")]
58pub mod spdp;
59#[cfg(feature = "alloc")]
60pub mod type_lookup;
61
62#[cfg(feature = "alloc")]
63pub use capabilities::PeerCapabilities;
64#[cfg(feature = "alloc")]
65pub use sedp::{
66 CacheCaps, DiscoveredEndpointsCache, DiscoveredPublication, DiscoveredSubscription,
67};
68#[cfg(feature = "alloc")]
69pub use spdp::{
70 DiscoveredParticipant, DiscoveredParticipantsCache, SpdpBeacon, SpdpError, SpdpReader,
71};