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 for ZeroDDS data types. Reads the IDL AST from zerodds-idl and emits pub struct ... { ... } plus impl zerodds_dcps::DdsType for ... plus the necessary zerodds_cdr::CdrEncode/CdrDecode helpers.

Build-time tool — forbid(unsafe_code), std-only, no no_std use case.

§Layer position

Layer 3 (schema) — analogous to zerodds-idl-cpp/-csharp/-java/-ts, but emits Rust code for the ZeroDDS-native stack.

§Public API

§What is emitted

Per IDL construct:

IDLRust
struct (final)pub struct + impl DdsType with XCDR2-final wire
struct (appendable)with zerodds_cdr::struct_enc::encode_appendable
struct (mutable)with zerodds_cdr::struct_enc::MutableStructEncoder
enumpub enum #[repr(i32)] + from_wire + CdrEncode/Decode
unionpub enum with variants per case
typedefpub type X = Y;
modulepub mod m { ... } with nested definitions
@keyencode_key_holder_be implementation
@id(N)member ID for mutable extensibility

§Example

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 processing: @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
Error family of the Rust codegen.
struct_emit
Emittiert pub struct X { … } plus impl DdsType for X { … }.
type_identifier
F-TYPES-3 codegen: computes a spec-conformant TypeIdentifier (XTypes 1.3 §7.3.4.2) for an IDL struct definition and emits it as a const expression in the DdsType impl.
type_map
IDL type → Rust type mapping.
typedef_emit
Emittiert IDL typedef → Rust pub type X = Y;.
union_emit
Emits IDL union → Rust enum with a discriminator.