zerodds-flatdata
Layer 4 — Core Services. Zero-copy same-host pub/sub (zerodds-flatdata-1.0).
- Source: crates/flatdata
- API docs: docs.rs/zerodds-flatdata
zerodds-flatdata provides the FlatStruct trait + slot layout for sub-µs-latency same-host pub/sub via SHM. Three production backends — in-memory (tests + single-process), POSIX shm/mmap (cross-process same-host), Iceoryx2 (optional bridge).
Spec anchors
docs/specs/zerodds-flatdata-1.0.md§1–§9 — complete spec (FlatStruct, slot layout, discovery, wire path, lifetime, schema versioning, safety, API).- ADR-0003 — three-backend architecture.
Layer position
Layer 4 — no ZeroDDS crate deps; shared_memory as an external dep is optional.
Quickstart
use std::sync::Arc;
use zerodds_flatdata::{FlatStruct, FlatWriter, FlatReader, InMemorySlotAllocator};
#[derive(Copy, Clone, Debug, PartialEq)]
#[repr(C)]
struct Pose { x: f64, y: f64, z: f64 }
unsafe impl FlatStruct for Pose {
const TYPE_HASH: [u8; 16] = [0xAA; 16];
}
let alloc = Arc::new(InMemorySlotAllocator::new(0, 4, Pose::WIRE_SIZE));
let writer = FlatWriter::<Pose>::new(Arc::clone(&alloc), 0b1);
let reader = FlatReader::<Pose>::new(Arc::clone(&alloc), 0);
writer.write(&Pose { x: 1.0, y: 2.0, z: 3.0 }).unwrap();
let got = reader.read().unwrap().unwrap();
Feature flags
| Feature | Default | Purpose |
|---|---|---|
std |
✅ | Standard library + mutex + threads. |
alloc |
✅ | Vec/Arc. |
posix-mmap |
✅ | PosixSlotAllocator (POSIX shm/mmap). |
iceoryx2-bridge |
❌ | Iceoryx2 adapter skeleton. |
Stability
All pub items are stable from 1.0.0. unsafe trait FlatStruct is API-stable; implementers must guarantee the layout guarantees via unsafe impl.
zerodds-flatdata
Layer 4 — Core Services. Zero-Copy Same-Host-Pub/Sub (zerodds-flatdata-1.0).
- Quelle: crates/flatdata
- API-Docs: docs.rs/zerodds-flatdata
zerodds-flatdata liefert den FlatStruct-Trait + Slot-Layout fuer Sub-µs-Latenz Same-Host-Pub/Sub via SHM. Drei produktive Backends — In-Memory (Tests + Single-Process), POSIX shm/mmap (Cross-Process Same-Host), Iceoryx2 (optionale Bridge).
Spec-Anker
docs/specs/zerodds-flatdata-1.0.md§1–§9 — komplettes Spec (FlatStruct, Slot-Layout, Discovery, Wire-Pfad, Lifetime, Schema-Versioning, Sicherheit, API).- ADR-0003 — Drei-Backend-Architektur.
Schichten-Position
Layer 4 — keine ZeroDDS-Crate-Deps; shared_memory als externe Dep ist optional.
Quickstart
use std::sync::Arc;
use zerodds_flatdata::{FlatStruct, FlatWriter, FlatReader, InMemorySlotAllocator};
#[derive(Copy, Clone, Debug, PartialEq)]
#[repr(C)]
struct Pose { x: f64, y: f64, z: f64 }
unsafe impl FlatStruct for Pose {
const TYPE_HASH: [u8; 16] = [0xAA; 16];
}
let alloc = Arc::new(InMemorySlotAllocator::new(0, 4, Pose::WIRE_SIZE));
let writer = FlatWriter::<Pose>::new(Arc::clone(&alloc), 0b1);
let reader = FlatReader::<Pose>::new(Arc::clone(&alloc), 0);
writer.write(&Pose { x: 1.0, y: 2.0, z: 3.0 }).unwrap();
let got = reader.read().unwrap().unwrap();
Feature-Flags
| Feature | Default | Zweck |
|---|---|---|
std |
✅ | Standard-Library + Mutex + Threads. |
alloc |
✅ | Vec/Arc. |
posix-mmap |
✅ | PosixSlotAllocator (POSIX shm/mmap). |
iceoryx2-bridge |
❌ | Iceoryx2-Adapter-Skelett. |
Stabilitaet
Alle pub-Items sind ab 1.0.0 stabil. unsafe trait FlatStruct ist API-stabil; Implementer muessen die Layout-Garantien per unsafe impl zusichern.