zerodds-flatdata-derive
Layer 4 — Core Services.
#[derive(FlatStruct)]proc-macro forzerodds-flatdata.
- Source: crates/flatdata-derive
- API docs: docs.rs/zerodds-flatdata-derive
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/unionare rejected withcompile_error!(layout not stable).- A missing
#[repr(C)]/#[repr(transparent)]is rejected withcompile_error!— default Rust repr has an undefined field layout, soas_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 fuerzerodds-flatdata.
- Quelle: crates/flatdata-derive
- API-Docs: docs.rs/zerodds-flatdata-derive
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/unionwerden mitcompile_error!abgelehnt (Layout nicht stable).- Fehlendes
#[repr(C)]/#[repr(transparent)]wird mitcompile_error!abgelehnt — Default-Repr-Rust hat undefiniertes Field-Layout, daher waereas_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.