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