Skip to main content

FlatStruct

Trait FlatStruct 

Source
pub unsafe trait FlatStruct:
    Copy
    + 'static
    + Send
    + Sync {
    const TYPE_HASH: [u8; 16];
    const WIRE_SIZE: usize = _;

    // Provided methods
    fn as_bytes(&self) -> &[u8]  { ... }
    unsafe fn from_bytes_unchecked(bytes: &[u8]) -> Self { ... }
}
Expand description

Marker-Trait fuer FlatData-faehige Types.

Spec-Zitat (zerodds-flatdata-1.0 §1.1):

Garantiert:

  • Self: Copy (kein Drop-Glue, plain bytes)
  • Self: 'static (kein Lifetime-Reference)
  • #[repr(C)] mit fest definiertem Alignment
  • as_bytes() und from_bytes_unchecked() sind safe-by-Layout

§Safety

Implementer MUSS sicherstellen:

  • Self ist #[repr(C)] (oder #[repr(transparent)] ueber einen einzigen repr(C)-Type).
  • Alle Felder sind FlatStruct oder Primitiv-Types ohne padding- sensitive UB (kein #[repr(packed)] mit Pointer-aligned Fields).
  • Self: Copy (Trait-Bound erzwingt das).
  • TYPE_HASH ist eindeutig fuer die exakte Wire-Layout-Variante; bei jeder Schema-Aenderung MUSS der Hash regeneriert werden.

Required Associated Constants§

Source

const TYPE_HASH: [u8; 16]

Eindeutiger Type-Hash (16 byte). Caller-Code generiert via SHA-256(type_name + field_layout_string) und nimmt die ersten 16 byte. Reader prueft diesen Hash gegen den Discovery-Hash; Mismatch → Slot-Drop.

Provided Associated Constants§

Source

const WIRE_SIZE: usize = _

Wire-Size der repr(C)-Struktur (= core::mem::size_of::<Self>()).

Provided Methods§

Source

fn as_bytes(&self) -> &[u8]

Liefert das Slot-Layout als Slice. Safe-by-Layout — Self: Copy

  • repr(C) garantieren dass der byte-cast defined ist.
Source

unsafe fn from_bytes_unchecked(bytes: &[u8]) -> Self

Rekonstruiert aus rohem Slice. Caller MUSS:

  • bytes.len() >= WIRE_SIZE
  • bytes-Provenance valide fuer WIRE_SIZE
  • Type-Hash zuvor verifiziert (sonst UB bei alignement-Mismatch)
§Safety

Siehe oben.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§