Skip to main content

bids/
lib.rs

1#![deny(unsafe_code)]
2//! Comprehensive Rust tools for BIDS (Brain Imaging Data Structure) datasets.
3//!
4//! This is the umbrella crate that re-exports all `bids-*` sub-crates, providing
5//! a single dependency for full BIDS dataset support. It is the Rust equivalent
6//! of the [PyBIDS](https://github.com/bids-standard/pybids) Python package.
7//!
8//! # Quick Start
9//!
10//! ```no_run
11//! use bids::{BidsLayout, BidsFile};
12//!
13//! let layout = BidsLayout::new("/path/to/bids/dataset").unwrap();
14//! let files = layout.get()
15//!     .suffix("bold")
16//!     .extension(".nii.gz")
17//!     .subject("01")
18//!     .collect()
19//!     .unwrap();
20//!
21//! for f in &files {
22//!     println!("{}: {:?}", f.filename, f.entities);
23//! }
24//! ```
25//!
26//! # Crate Organization
27//!
28//! - **Core** ([`core`]) — Fundamental types: files, entities, metadata, config, errors
29//! - **I/O** ([`io`]) — TSV/JSON reading, path building, file writing
30//! - **Layout** ([`layout`]) — Dataset indexing and fluent query API
31//! - **Variables** ([`variables`]) — BIDS variable system for statistical modeling
32//! - **Modeling** ([`modeling`]) — BIDS-StatsModels, HRF functions, transformations
33//! - **Reports** ([`reports`]) — Auto-generated methods sections
34//! - **Domain crates** — Modality-specific support (EEG, MEG, PET, etc.)
35//! - **Infrastructure** — NIfTI parsing, signal filtering, formula parsing, schema validation
36//!
37//! # Feature Flags
38//!
39//! | Feature | Description |
40//! |---------|-------------|
41//! | `ndarray` | Enable `ndarray` integration for EEG (`Array2`) and NIfTI (`ArrayD`) |
42//! | `safetensors` | Enable safetensors export for ML frameworks |
43//! | `mmap` | Enable memory-mapped NIfTI access via `memmap2` |
44//! | `arrow` | Enable Apache Arrow / Parquet export for dataset manifests |
45
46// Core
47pub use bids_core as core;
48pub use bids_core::error::Result;
49pub use bids_core::utils::{collect_associated_files, convert_json_keys, matches_entities};
50pub use bids_core::{
51    BidsError, BidsFile, BidsMetadata, Config, CopyMode, DatasetDescription, Entities, Entity,
52    EntityValue, PaddedInt, StringEntities,
53};
54
55// IO
56pub use bids_io as io;
57pub use bids_io::gradient::GradientTable;
58
59// Layout
60pub use bids_layout as layout;
61pub use bids_layout::{BidsLayout, InvalidFilters, Query, QueryFilter, Scope};
62
63// Variables
64pub use bids_variables as variables;
65
66// Validation
67pub use bids_validate as validate;
68
69// Derivatives
70pub use bids_derive as derive;
71
72// Modeling
73pub use bids_modeling as modeling;
74pub use bids_modeling::{ContrastInfo, HrfModel, StatsModelsGraph};
75
76// Reports
77pub use bids_reports as reports;
78pub use bids_reports::BidsReport;
79
80// Domain crates
81pub use bids_beh as beh;
82pub use bids_eeg as eeg;
83pub use bids_ieeg as ieeg;
84pub use bids_meg as meg;
85pub use bids_micr as micr;
86pub use bids_motion as motion;
87pub use bids_mrs as mrs;
88pub use bids_nirs as nirs;
89pub use bids_perf as perf;
90pub use bids_pet as pet;
91
92// Dataset downloading and aggregation
93pub use bids_dataset as dataset;
94
95// Common trait for time-series data
96pub use bids_core::timeseries::TimeSeries;
97
98// Infrastructure crates
99pub use bids_filter as filter;
100pub use bids_formula as formula;
101pub use bids_inflect as inflect;
102pub use bids_nifti as nifti;
103pub use bids_schema as schema;
104
105// Version tracking
106pub use bids_schema::version::{
107    BidsVersion, Compatibility, MIN_COMPATIBLE_VERSION, SUPPORTED_BIDS_VERSION,
108};
109
110/// Convenience prelude importing the most commonly used types.
111///
112/// ```
113/// use bids::prelude::*;
114/// ```
115pub mod prelude {
116    pub use bids_core::error::Result;
117    pub use bids_core::timeseries::TimeSeries;
118    pub use bids_core::{BidsError, BidsFile, BidsMetadata, Config, DatasetDescription};
119    pub use bids_core::{Entities, Entity, EntityValue};
120    pub use bids_dataset::{Aggregator, DatasetFilter, OpenNeuro, Split};
121    pub use bids_eeg::{EegData, EegLayout, ReadOptions};
122    pub use bids_layout::{BidsLayout, InvalidFilters, Query, QueryFilter, Scope};
123    pub use bids_nifti::NiftiImage;
124    pub use bids_reports::BidsReport;
125}