zerodds-flatdata-derive 1.0.0-rc.1

#[derive(FlatStruct)] proc-macro fuer zerodds-flatdata-1.0 (Type-Hash + repr(C)-Check).
Documentation
# Changelog

Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/), Versionierung folgt [Semantic Versioning](https://semver.org/lang/de/).

## [1.0.0-rc.1] — 2026-05-06

Initiale Release-Materialisierung der `zerodds-flatdata-derive`-Crate.

### Spec-Referenzen

- **`docs/specs/zerodds-flatdata-1.0.md`** §1.2 (Derive-Macro): `#[derive(FlatStruct)]` generiert `unsafe impl FlatStruct for T` mit `TYPE_HASH = sha256(layout_signature(T))[..16]`.

### Public-API

- `#[derive(FlatStruct)]` — proc-macro-derive auf `zerodds_flatdata::FlatStruct`. Generiert eine `unsafe impl`-Block mit der `TYPE_HASH`-Konstanten.

Es gibt keine weiteren oeffentlichen Items: die Crate ist eine reine `proc-macro = true`-Lib.

### Implementierung

Die `expand`-Funktion akzeptiert nur `struct`-DeriveInputs (Named, Tuple, Unit). `enum` und `union` werden mit `compile_error!` abgelehnt, weil ihr Layout selbst unter `repr(C)` nicht in derselben Form wie struct-Layouts vorhersagbar ist (Discriminant-Position, untagged-Union-Aliasing).

Vor der Hash-Berechnung wird `has_repr_c_or_transparent(&input.attrs)` geprueft. Fehlt `#[repr(C)]` oder `#[repr(transparent)]`, lehnt der Macro mit `compile_error!` ab — die Doc-Promise "FlatStruct verlangt repr(C)" wird damit zur Compile-Time-Garantie statt zu einem Caller-Vertrauensdokument.

Der `TYPE_HASH` ergibt sich aus `sha256(<TypeName>{<field-name>:<ty>,...})[..16]`. Der Layout-String enthaelt explizit:
- Type-Name (Type-Rename → neuer Hash).
- Field-Order (Field-Reorder → neuer Hash).
- Field-Names (bei Named-Structs) und Field-Type-Strings (Field-add/remove + Field-Type-Change → neuer Hash).

Die Bounds `Copy + 'static + Send + Sync` werden vom Trait selbst erzwungen — der Macro generiert keine eigenen Bound-Checks. Damit erscheinen Trait-Bound-Fehler als verstaendliche `T: Copy` /usw.-Compiler-Errors am Use-Site, nicht als kryptische Macro-Errors.

Generierte Code-Form:
```rust
#[automatically_derived]
unsafe impl ::zerodds_flatdata::FlatStruct for #name {
    const TYPE_HASH: [u8; 16] = [/* 16 byte */];
}
```

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

### Architektur

- **Layer:** 4 (Core Services).
- **Dependencies (in):** `syn 2`, `quote 1`, `proc-macro2 1`, `sha2` (workspace, default-features=false). Keine ZeroDDS-Crate-Deps.
- **Dependents (out):** `zerodds-flatdata` (`dev-dependencies`, fuer den `tests/derive.rs`-Smoketest); end-user-Crates die FlatStruct ableiten wollen.
- **Feature-Flags:** keine.

### Stabilitaet

Alle oeffentlichen Macro-Pfade sind RC1-stabil. Das Layout-Signatur-Format ist Wire-stabil: eine Aenderung wuerde alle bisher generierten `TYPE_HASH`-Werte invalidieren und ist daher als Major-Breaking-Change klassifiziert.