Skip to main content

zerodds_py/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! Crate `zerodds-py`. Safety classification: **STANDARD** (Binding-FFI).
5//!
6//! PyO3-Bindings fuer ZeroDDS DCPS-API. Liefert ein importierbares
7//! Python-Modul `zerodds_py` ueber `maturin build` oder direkt via
8//! `cargo build --features extension-module`.
9//!
10//! Spec: OMG DDS 1.4 (formal/2015-04-10) §2.2.2 mit Python-Idiomen.
11//!
12//! ## Schichten-Position
13//!
14//! Layer 6 — PSMs / Bindings.
15//!
16//! ## Build
17//!
18//! - **Default-Cargo-Build** (ohne Python-Headers): pyo3 ist optional,
19//!   das Crate compilet als lib-Platzhalter. Keine Python-API
20//!   verfuegbar — so laeuft der Workspace-CI ohne Python-Dependency.
21//! - **Mit `--features extension-module`** (oder via `maturin build`):
22//!   wird als `cdylib` kompiliert und erzeugt ein importierbares
23//!   Python-Modul `zerodds_py`.
24//!
25//! ## API
26//!
27//! ```python
28//! import zerodds_py as zerodds
29//!
30//! factory = zerodds.DomainParticipantFactory.instance()
31//! participant = factory.create_participant_offline(0)
32//!
33//! topic = participant.create_bytes_topic("Chatter")
34//! publisher = participant.create_publisher()
35//! writer = publisher.create_bytes_writer(topic)
36//!
37//! subscriber = participant.create_subscriber()
38//! reader = subscriber.create_bytes_reader(topic)
39//!
40//! writer.write(b"hello")
41//! samples = reader.take()  # List[bytes]
42//! ```
43//!
44//! Typisierte `DdsType`-Bindings (Dataclass-Mapping via IDL-Generator)
45//! folgen aus `crates/idl-rust` ueber Python-Bindings-Generator.
46
47#![warn(unsafe_code)]
48#![warn(missing_docs)]
49
50#[cfg(feature = "extension-module")]
51mod ffi;
52
53#[cfg(test)]
54#[allow(clippy::expect_used)]
55mod tests {
56    #[test]
57    fn dcps_re_export_compiles() {
58        // Minimaler Smoketest: zerodds-dcps ist als Dependency greifbar.
59        // Die echten PyO3-Tests laufen aus Python heraus (pytest).
60        use zerodds_dcps::DomainParticipantFactory;
61        let _f: &DomainParticipantFactory = DomainParticipantFactory::instance();
62    }
63}