zerodds_web/lib.rs
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! OMG DDS-WEB 1.0 — Web-Enabled DDS Object Model + REST PSM.
5//!
6//! Crate `zerodds-web`. Safety classification: **STANDARD**.
7//! Spec `formal/2014-12-01` (`docs/standards/cache/omg/zerodds-web-1.0.pdf`).
8//!
9//! # Scope
10//!
11//! Wir implementieren das **WebDDS-Object-Model** (Spec §7) und das
12//! **REST-PSM** (Spec §8.3) als pure-Rust no_std+alloc Library:
13//!
14//! * `WebDDS::Root` Singleton + `Application` + `Client` +
15//! `AccessController` + `DomainParticipant` (§7.3 Object-Model).
16//! * `ReturnStatus` mit allen Spec-Codes (§7.3.1 + §8.3.2 Mapping zu
17//! HTTP-Status).
18//! * `RestRoute` Parser fuer alle URI-Patterns aus Spec §8.3.1
19//! Tab 4 + §8.3.3 Tab 5 (alle 30+ Routes mit Parameter-Extraktion).
20//! * `Representation` XML-Element-Name-Registry (Spec §8.3.4 Tab 6).
21//! * `Headers` HTTP-Request/Response-Header-Set (Spec §8.3.5 Tab 7+8).
22//! * `SessionId` Authenticated-Session-Tracking (§7.3.1.1).
23//!
24//! # Was nicht abgedeckt ist
25//!
26//! * **HTTP-Server-Implementation** — Caller-Layer (typisch
27//! `axum`/`hyper`); diese Crate liefert Routing-Tabellen + Status-
28//! Mapping, der Caller bindet an HTTP-Stack.
29//! * **XML-Body-Serialization** — Caller-Layer mit `crates/xml/`-
30//! Loader + DDS-XTYPES-Type-Definition-Reader; das XML-Element-
31//! Name-Registry hier liefert die Wire-Tags.
32//! * **WebSocket-Push fuer DataReader-Notifications** — siehe
33//! `crates/websocket-bridge/`; Caller wired das via Listener-
34//! Callback aus `crates/dcps/`.
35//! * **SOAP/WSDL-Platform** (Spec §8.4) — `n/a` (REST ist mandatory,
36//! SOAP ist optional + selten verwendet).
37
38#![forbid(unsafe_code)]
39#![warn(missing_docs)]
40
41extern crate alloc;
42
43pub mod access_control;
44pub mod bridge;
45pub mod headers;
46pub mod model;
47pub mod representation;
48pub mod rest;
49pub mod sample_selector;
50pub mod session;
51pub mod status;
52
53pub use access_control::{Decision, Operation, Permissions, Rule};
54pub use bridge::{BackendError, BackendResult, DdsBackend, enforce};
55pub use headers::{REQUEST_API_KEY, RequestHeaders, ResponseHeaders};
56pub use model::{Application, Client, DomainParticipant, WebDdsRoot};
57pub use representation::{ContentType, RepresentationKind, element_name};
58pub use rest::{REST_PREFIX, RestMethod, RestRoute, parse_route};
59pub use sample_selector::{
60 BoolOp, CompareOp, FilterExpression, InstanceStateMatch, Literal, MetadataExpression,
61 ParseError as SampleSelectorParseError, SampleSelector, SampleStateMatch, ViewStateMatch,
62 parse_sample_selector,
63};
64pub use session::SessionId;
65pub use status::{ReturnStatus, http_status_for};