Skip to main content

zerodds_idl_rust/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3//! Crate `zerodds-idl-rust`. Safety classification: **STANDARD**.
4//!
5//! IDL4 → Rust-Code-Generator fuer ZeroDDS-DataTypes. Liest den IDL-AST
6//! aus `zerodds-idl` und emittiert `pub struct ... { ... }` plus
7//! `impl zerodds_dcps::DdsType for ...` plus die noetigen
8//! `zerodds_cdr::CdrEncode`/`CdrDecode`-Helper.
9//!
10//! Build-Zeit-Tool — `forbid(unsafe_code)`, std-only, kein no_std-Use-Case.
11//!
12//! ## Schichten-Position
13//!
14//! Layer 3 (Schema) — analog zu `zerodds-idl-cpp`/`-csharp`/`-java`/`-ts`,
15//! aber emittiert Rust-Code fuer den ZeroDDS-eigenen Stack.
16//!
17//! ## Public API
18//!
19//! - [`generate_rust_module`] — AST + Optionen → Rust-Modul-Code.
20//! - [`RustGenOptions`] — Codegen-Optionen.
21//! - [`error::RustGenError`] — Fehler-Familie.
22//!
23//! ## Was wird emittiert
24//!
25//! Pro IDL-Konstrukt:
26//!
27//! | IDL | Rust |
28//! |-----|------|
29//! | `struct` (final) | `pub struct` + `impl DdsType` mit XCDR2-Final-Wire |
30//! | `struct` (appendable) | mit `zerodds_cdr::struct_enc::encode_appendable` |
31//! | `struct` (mutable) | mit `zerodds_cdr::struct_enc::MutableStructEncoder` |
32//! | `enum` | `pub enum #[repr(i32)]` + `from_wire` + `CdrEncode/Decode` |
33//! | `union` | `pub enum` mit Variants pro Case |
34//! | `typedef` | `pub type X = Y;` |
35//! | `module` | `pub mod m { ... }` mit nested Definitions |
36//! | `@key` | `encode_key_holder_be` Implementation |
37//! | `@id(N)` | Member-ID fuer mutable extensibility |
38//!
39//! ## Beispiel
40//!
41//! ```rust
42//! use zerodds_idl::config::ParserConfig;
43//! use zerodds_idl_rust::{generate_rust_module, RustGenOptions};
44//!
45//! let ast = zerodds_idl::parse(
46//!     "struct S { long x; long y; };",
47//!     &ParserConfig::default(),
48//! )
49//! .expect("parse");
50//! let rust_src = generate_rust_module(&ast, &RustGenOptions::default()).expect("gen");
51//! assert!(rust_src.contains("pub struct S"));
52//! assert!(rust_src.contains("impl zerodds_dcps::DdsType for S"));
53//! ```
54
55#![forbid(unsafe_code)]
56#![warn(missing_docs)]
57
58pub mod annotations;
59pub mod bitset_emit;
60pub mod emitter;
61pub mod enum_emit;
62pub mod error;
63pub mod struct_emit;
64pub mod type_identifier;
65pub mod type_map;
66pub mod typedef_emit;
67pub mod union_emit;
68
69pub use emitter::{RustGenOptions, generate_rust_module};
70pub use error::{Result, RustGenError};