Expand description
Crate zerodds-foundation. Safety classification: SAFE.
Foundation-Layer-Primitives fuer den ZeroDDS-Stack: Hot-Path- Buffer-Pools, Wire-Integritaets-Hashes (CRC-32C / CRC-64-XZ / MD5), Observability-Event-Sprache + Sinks, Tracing-Spans + Histogramme, und ein Lock-Free-Read RCU-Cell-Container.
no_std-tauglich, forbid(unsafe_code). Pure-Rust ohne externe
Crates — die Foundation-Pillar-Idee „Frame bleibt nicht hohl“.
§Schichten-Position
Layer 0 (Foundation). Hat keine Dependencies auf andere ZeroDDS-Crates. Wird von Layer 1 (Primitives: cdr, qos, types) und allen hoeheren Schichten verwendet.
Architektur-Referenz: docs/architecture/02_architecture.md §3
und docs/architecture/04_safety_by_architecture.md §2.
§Public API
- Stack-Buffer (
PoolBuffer,PoolBufferError): fixed-capacity Buffer fuer Hot-Path-Allokationen, on-stack mitCAP-Generic. Append-Operationen sind O(1) ohne Heap-Touch; Overflow wird als Result signalisiert statt zu panicen. - CRC + MD5 (
crc32c,crc64_xz,md5): Wire-Integritaets- Hashes; pure-Rust mit Standard-Lookup-Tables. - Observability (
Event,Sink,Level,Component,NullSink,StderrJsonSink,VecSink): strukturierte DDS-Events; Sink-Trait fuer beliebige Konsumenten. - Tracing (
Span,SpanContext,TraceId,SpanId,SpanKind,SpanStatus,Histogram): Spans + Histogramme fuer grobgranulares Tracing; OTLP-Export imzerodds-observability-otlp-Crate. - RCU (
RcuCell): Copy-on-Write-Container fuer wenig-Schreib/ viel-Lese-Patterns ohneunsafe.
§Feature-Flags
| Feature | Default | Zweck |
|---|---|---|
std | ✅ | Aktiviert BufferPool, RcuCell, StderrJsonSink, VecSink. Implies alloc. |
alloc | ✅ (via std) | Aktiviert observability + tracing + MD5 mit Vec-Padding. |
safety | ❌ | Reserviert fuer zukuenftige Safety-Build-Constraints. |
Ohne Features (default-features = false): nur PoolBuffer,
crc32c, crc64_xz, md5 (no_std-MD5-Pfad ist auf 56 Byte
Eingabe limitiert).
§Beispiel
use zerodds_foundation::{crc32c, PoolBuffer, PoolBufferError};
// CRC-32C ueber ein RTPS-Datagramm.
let payload = b"\x52\x54\x50\x53\x02\x05\x01\x0F";
let checksum = crc32c(payload);
assert_eq!(checksum & 0xFFFF_FFFF, checksum);
// Hot-Path-Buffer mit fester Kapazitaet.
let mut buf: PoolBuffer<256> = PoolBuffer::new();
buf.extend_from_slice(payload).unwrap();
assert_eq!(buf.as_slice(), payload);
// Overflow ist explizit, kein Panic.
let mut tiny: PoolBuffer<4> = PoolBuffer::new();
assert_eq!(
tiny.extend_from_slice(payload),
Err(PoolBufferError::Overflow)
);Re-exports§
pub use buffer::PoolBuffer;pub use buffer::PoolBufferError;pub use crc::crc32c;pub use crc::crc64_xz;pub use crc::md5;pub use observability::Component;pub use observability::Event;pub use observability::Level;pub use observability::NullSink;pub use observability::Sink;pub use observability::null_sink;pub use observability::StderrJsonSink;pub use observability::VecSink;pub use rcu::RcuCell;pub use tracing::Histogram;pub use tracing::Span;pub use tracing::SpanContext;pub use tracing::SpanId;pub use tracing::SpanKind;pub use tracing::SpanStatus;pub use tracing::TraceId;
Modules§
- buffer
- Fixed-Capacity Stack-Buffer fuer Hot-Path-Allokationen.
- crc
- Wire-Integrity-Primitive: CRC-32C, CRC-64-XZ, MD5.
- observability
- Observability — strukturierte DDS-Events fuer Tracing und Metriken.
- rcu
- RCU-Cell — Copy-on-Write-Container fuer wenig-Schreib/viel-Lese-Patterns.
- tracing
- Spans + Histogramme — grobgranulare Tracing-Primitive.