Skip to main content

zerodds_recorder/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! Crate `zerodds-recorder`. Safety classification: **STANDARD**.
5//!
6//! `.zddsrec` Recording-/Replay-Format. Spec:
7//! [`docs/specs/zddsrec-1.0.md`](../../docs/specs/zddsrec-1.0.md).
8//!
9//! ## Schichten-Position
10//!
11//! Layer 4 — Core Services. Pure-Rust + alloc, ohne ZeroDDS-Crate-Deps.
12//!
13//! ## Public API (Stand 1.0.0-rc.1)
14//!
15//! - [`Header`], [`Frame`], [`FrameView`], [`SampleKind`], `ParticipantEntry`, `TopicEntry`.
16//! - [`RecordWriter`] / [`WriteError`] — schreibt einen `.zddsrec`-Stream.
17//! - [`RecordReader`] / [`ReadError`] — parsed einen `.zddsrec`-Stream.
18//! - [`RecordingSession`] / [`SessionError`] / [`SessionOptions`] / [`TopicKey`] — high-level API.
19//!
20//! # Format-Layout
21//!
22//! Ein `.zddsrec`-File besteht aus einem [`Header`] gefolgt von einer
23//! Sequenz von [`Frame`]-Records. Endianness: little-endian fuer alle
24//! Multi-Byte-Felder.
25//!
26//! ```text
27//! +---------------------------------+
28//! | Magic "ZDDS" (4 bytes)          |
29//! | Version u32 (=1)                |
30//! | TimeBaseUnixNs i64              |
31//! | ParticipantCount u32            |
32//! | TopicCount u32                  |
33//! | Participants[] (GUID16+nameLen+name)
34//! | Topics[] (typeLen+typeName+nameLen+name)
35//! +---------------------------------+
36//! | FrameMagic 'F' (1 byte)         |
37//! | TimestampDeltaNs i64            |
38//! | ParticipantIdx u32              |
39//! | TopicIdx u32                    |
40//! | SampleKind u8 (0=Alive,1=Disposed,2=Unregistered)
41//! | PayloadLen u32                  |
42//! | CdrPayload[PayloadLen]          |
43//! +---------------------------------+
44//! | ... weitere Frames ...          |
45//! +---------------------------------+
46//! ```
47//!
48//! # Versionierung
49//!
50//! Version = 1 ([`ZDDSREC_VERSION`]). Backward-incompatible Aenderungen
51//! erhoehen die Version; der Reader lehnt unbekannte Versionen ab.
52
53#![warn(unsafe_code)]
54#![warn(missing_docs)]
55
56extern crate alloc;
57
58pub mod format;
59pub mod reader;
60pub mod session;
61pub mod writer;
62
63pub use format::{
64    Frame, FrameView, Header, ParticipantEntry, SampleKind, TopicEntry, ZDDSREC_MAGIC,
65    ZDDSREC_VERSION,
66};
67pub use reader::{ReadError, RecordReader};
68pub use session::{RecordingSession, SessionError, SessionOptions, TopicKey};
69pub use writer::{RecordWriter, WriteError};