biodream 0.2.7

Zero-copy, streaming-capable toolkit for reading and writing BIOPAC AcqKnowledge (.acq) files
Documentation
[package]
name = "biodream"
version = "0.2.7"
edition = "2024"
rust-version = "1.95.0"
description = "Zero-copy, streaming-capable toolkit for reading and writing BIOPAC AcqKnowledge (.acq) files"
repository = "https://github.com/greysquirr3l/biodream"
license = "MIT OR Apache-2.0"
readme = "README.md"
keywords = ["biopac", "acqknowledge", "physiology", "biosignals", "bioread"]
categories = ["science", "parser-implementations", "encoding"]
exclude = [".mcp.json", ".vscode/", ".github/", "deny.toml", "plan.toml", "docs/", "reference_projects/"]

[lib]
name = "biodream"
path = "src/lib.rs"

[[bin]]
name = "biopac"
path = "src/main.rs"
required-features = ["read"]

[features]
# Standard library support — all I/O-dependent features require this.
std = ["thiserror/std", "binrw/std"]

# Core read capability. Requires std.
read = ["std", "dep:flate2"]

# Write .acq files back to disk.
write = ["read"]

# CSV export (bundled in the default feature set).
csv = ["read", "dep:csv"]

# Apache Arrow IPC export.
arrow = ["read", "dep:arrow-array", "dep:arrow-schema", "dep:arrow-ipc"]

# Parquet export (builds on Arrow).
parquet = ["arrow", "dep:parquet"]

# HDF5 export — requires libhdf5-dev system library.
hdf5 = ["read", "dep:hdf5"]

# Serde derive support for domain types.
serde = ["dep:serde"]

# Waveform image generation (PNG / SVG).
plot = ["read", "dep:plotters"]

# Physiological signal processing: R-peak detection, PPG foot detection,
# PTT calculation, and Sync-pulse edge detection.  Pure-Rust, no extra deps.
physio = []

# Default: read + CSV.
default = ["read", "csv"]

[dependencies]
# Binary parsing — no_std compatible when default-features = false.
binrw = { version = "0.14", default-features = false }

# Error handling — no_std compatible when default-features = false.
thiserror = { version = "2.0", default-features = false }

# zlib/DEFLATE decompression for compressed .acq files.
flate2 = { version = "1.0", optional = true }

# CSV serialization.
csv = { version = "1.3", optional = true }

# Serde serialization/deserialization for domain types.
serde = { version = "1.0", optional = true, features = ["derive"] }

# Apache Arrow IPC export.
arrow-array = { version = "58", optional = true }
arrow-schema = { version = "58", optional = true }
arrow-ipc = { version = "58", optional = true }

# Parquet export.
parquet = { version = "58", optional = true }

# HDF5 export.
hdf5 = { version = "0.8", optional = true }

# Waveform image rendering.
plotters = { version = "0.3", optional = true, default-features = false, features = ["svg_backend", "bitmap_backend", "bitmap_encoder", "all_series"] }

# CLI binary dependencies — only used from src/main.rs and src/cli/.
# Not imported by lib.rs code.
anyhow = "1.0"
clap = { version = "4.5", features = ["derive"] }
serde_json = "1"

[dev-dependencies]
# bytes: in-memory ChunkReader for Parquet round-trip tests.
bytes = "1"
# property-based testing for write → read round-trip coverage.
proptest = "1"

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]