zerodds-flatdata-derive

Layer 4 — Core Services. #[derive(FlatStruct)] proc-macro for zerodds-flatdata.

Generates unsafe impl FlatStruct for T with a deterministic SHA-256 TYPE_HASH from the type name and field layout.

Spec anchors

  • docs/specs/zerodds-flatdata-1.0.md §1.2 — derive macro.

Compile-time checks

  • enum/union are rejected with compile_error! (layout not stable).
  • A missing #[repr(C)] / #[repr(transparent)] is rejected with compile_error! — default Rust repr has an undefined field layout, so as_bytes()/from_bytes_unchecked() would be UB.

The Copy + 'static + Send + Sync bounds are enforced by the trait itself — the compiler emits understandable errors when you try to derive a non-Copy type.

Layer position

Layer 4. Build-time companion to zerodds-flatdata, no runtime code surface. No ZeroDDS crate deps.

Quickstart

use zerodds_flatdata_derive::FlatStruct;

#[derive(Copy, Clone, FlatStruct)]
#[repr(C)]
struct Pose { x: f64, y: f64, z: f64 }

// expands to:
//
//   #[automatically_derived]
//   unsafe impl ::zerodds_flatdata::FlatStruct for Pose {
//       const TYPE_HASH: [u8; 16] = [/* sha256("Pose{x:f64,y:f64,z:f64}")[..16] */];
//   }

WIRE_SIZE and the as_bytes/from_bytes_unchecked methods come from the trait as defaults and need no macro override.

Layout signature

<TypeName>{<field-name>:<field-ty>,...} detects:

  • type rename → new hash.
  • field add/remove → new hash.
  • field reorder → new hash.
  • field type change → new hash.

Feature flags

None.

Stability

1.0.0-rc.3 is the initial release materialization. The layout- signature format is wire-stable; a change would invalidate all previously generated TYPE_HASH values and is major-breaking.

zerodds-flatdata-derive

Layer 4 — Core Services. #[derive(FlatStruct)] Proc-Macro fuer zerodds-flatdata.

Generiert unsafe impl FlatStruct for T mit einem deterministischen SHA-256-TYPE_HASH aus Type-Name und Field-Layout.

Spec-Anker

  • docs/specs/zerodds-flatdata-1.0.md §1.2 — Derive-Macro.

Compile-Time-Checks

  • enum/union werden mit compile_error! abgelehnt (Layout nicht stable).
  • Fehlendes #[repr(C)] / #[repr(transparent)] wird mit compile_error! abgelehnt — Default-Repr-Rust hat undefiniertes Field-Layout, daher waere as_bytes()/from_bytes_unchecked() UB.

Die Copy + 'static + Send + Sync-Bounds erzwingt der Trait selbst — der Compiler emittiert verstaendliche Fehler beim Versuch, ein Non-Copy-Type zu deriven.

Schichten-Position

Layer 4. Build-Time-Companion zu zerodds-flatdata, keine Runtime- Code-Surface. Keine ZeroDDS-Crate-Deps.

Quickstart

use zerodds_flatdata_derive::FlatStruct;

#[derive(Copy, Clone, FlatStruct)]
#[repr(C)]
struct Pose { x: f64, y: f64, z: f64 }

// expandiert zu:
//
//   #[automatically_derived]
//   unsafe impl ::zerodds_flatdata::FlatStruct for Pose {
//       const TYPE_HASH: [u8; 16] = [/* sha256("Pose{x:f64,y:f64,z:f64}")[..16] */];
//   }

WIRE_SIZE und die as_bytes/from_bytes_unchecked-Methoden kommen als Default aus dem Trait und brauchen keinen Macro-Override.

Layout-Signatur

<TypeName>{<field-name>:<field-ty>,...} erkennt:

  • Type-Rename → neuer Hash.
  • Field-add/remove → neuer Hash.
  • Field-reorder → neuer Hash.
  • Field-Type-Change → neuer Hash.

Feature-Flags

Keine.

Stabilitaet

1.0.0-rc.3 ist die initiale Release-Materialisierung. Layout- Signatur-Format ist Wire-stabil; eine Aenderung wuerde alle bisher generierten TYPE_HASH-Werte invalidieren und ist Major-Breaking.