Skip to main content

Crate zerodds_idl_rust

Crate zerodds_idl_rust 

Source
Expand description

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

§Was wird emittiert

Pro IDL-Konstrukt:

IDLRust
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
enumpub enum #[repr(i32)] + from_wire + CdrEncode/Decode
unionpub enum mit Variants pro Case
typedefpub type X = Y;
modulepub mod m { ... } mit nested Definitions
@keyencode_key_holder_be Implementation
@id(N)Member-ID fuer mutable extensibility

§Beispiel

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"));

Re-exports§

pub use emitter::RustGenOptions;
pub use emitter::generate_rust_module;
pub use error::Result;
pub use error::RustGenError;

Modules§

annotations
Annotation-Verarbeitung: @key, @id, @extensibility, @nested, @must_understand, @optional, @default.
bitset_emit
IDL bitset / bitmask → Rust.
emitter
Top-Level-Emitter: AST → Rust-String.
enum_emit
Emittiert IDL enum → Rust enum.
error
Fehler-Familie des Rust-Codegens.
struct_emit
Emittiert pub struct X { … } plus impl DdsType for X { … }.
type_identifier
F-TYPES-3 Codegen: berechnet eine spec-konforme TypeIdentifier (XTypes 1.3 §7.3.4.2) für eine IDL-Struct-Definition und emittiert sie als const-Expression im DdsType-Impl.
type_map
IDL-Type → Rust-Type Mapping.
typedef_emit
Emittiert IDL typedef → Rust pub type X = Y;.
union_emit
Emittiert IDL union → Rust enum mit Discriminator.