1#![forbid(unsafe_code)]
2#![cfg_attr(not(feature = "std"), no_std)]
3
4#![cfg_attr(feature = "std", doc = "### Reading an MDF file")]
46#![cfg_attr(feature = "std", doc = "")]
47#![cfg_attr(feature = "std", doc = "```no_run")]
48#![cfg_attr(feature = "std", doc = "use mdf4_rs::{MDF, Result};")]
49#![cfg_attr(feature = "std", doc = "")]
50#![cfg_attr(feature = "std", doc = "fn main() -> Result<()> {")]
51#![cfg_attr(
52 feature = "std",
53 doc = " let mdf = MDF::from_file(\"recording.mf4\")?;"
54)]
55#![cfg_attr(feature = "std", doc = "")]
56#![cfg_attr(feature = "std", doc = " for group in mdf.channel_groups() {")]
57#![cfg_attr(
58 feature = "std",
59 doc = " println!(\"Group: {:?}\", group.name()?);"
60)]
61#![cfg_attr(feature = "std", doc = "")]
62#![cfg_attr(feature = "std", doc = " for channel in group.channels() {")]
63#![cfg_attr(
64 feature = "std",
65 doc = " let name = channel.name()?.unwrap_or_default();"
66)]
67#![cfg_attr(feature = "std", doc = " let values = channel.values()?;")]
68#![cfg_attr(
69 feature = "std",
70 doc = " let valid_count = values.iter().filter(|v| v.is_some()).count();"
71)]
72#![cfg_attr(
73 feature = "std",
74 doc = " println!(\" {}: {} valid samples\", name, valid_count);"
75)]
76#![cfg_attr(feature = "std", doc = " }")]
77#![cfg_attr(feature = "std", doc = " }")]
78#![cfg_attr(feature = "std", doc = " Ok(())")]
79#![cfg_attr(feature = "std", doc = "}")]
80#![cfg_attr(feature = "std", doc = "```")]
81#![cfg_attr(feature = "std", doc = "### Using the Index for Efficient Access")]
114#![cfg_attr(feature = "std", doc = "")]
115#![cfg_attr(feature = "std", doc = "```no_run")]
116#![cfg_attr(
117 feature = "std",
118 doc = "use mdf4_rs::{MdfIndex, FileRangeReader, Result};"
119)]
120#![cfg_attr(feature = "std", doc = "")]
121#![cfg_attr(feature = "std", doc = "fn main() -> Result<()> {")]
122#![cfg_attr(feature = "std", doc = " // Create an index from a file")]
123#![cfg_attr(
124 feature = "std",
125 doc = " let index = MdfIndex::from_file(\"recording.mf4\")?;"
126)]
127#![cfg_attr(feature = "std", doc = "")]
128#![cfg_attr(feature = "std", doc = " // Save index for later use")]
129#![cfg_attr(
130 feature = "std",
131 doc = " index.save_to_file(\"recording.mdf4.index\")?;"
132)]
133#![cfg_attr(feature = "std", doc = "")]
134#![cfg_attr(feature = "std", doc = " // Load index and read specific channel")]
135#![cfg_attr(
136 feature = "std",
137 doc = " let index = MdfIndex::load_from_file(\"recording.mdf4.index\")?;"
138)]
139#![cfg_attr(
140 feature = "std",
141 doc = " let mut reader = FileRangeReader::new(\"recording.mf4\")?;"
142)]
143#![cfg_attr(feature = "std", doc = "")]
144#![cfg_attr(
145 feature = "std",
146 doc = " let values = index.read_channel_values_by_name(\"Temperature\", &mut reader)?;"
147)]
148#![cfg_attr(
149 feature = "std",
150 doc = " println!(\"Read {} values\", values.len());"
151)]
152#![cfg_attr(feature = "std", doc = "")]
153#![cfg_attr(feature = "std", doc = " Ok(())")]
154#![cfg_attr(feature = "std", doc = "}")]
155#![cfg_attr(feature = "std", doc = "```")]
156#[cfg(feature = "alloc")]
176extern crate alloc;
177
178#[cfg(feature = "alloc")]
180mod types;
181
182#[cfg(feature = "alloc")]
184pub mod blocks;
185#[cfg(feature = "alloc")]
186pub mod error;
187#[cfg(feature = "alloc")]
188pub mod writer;
189
190#[cfg(feature = "alloc")]
192pub mod can;
193
194#[cfg(feature = "std")]
196mod channel;
197#[cfg(feature = "std")]
198mod channel_group;
199#[cfg(feature = "std")]
200pub mod cut;
201#[cfg(feature = "std")]
202pub mod index;
203#[cfg(feature = "std")]
204mod mdf;
205#[cfg(feature = "std")]
206pub mod merge;
207#[cfg(feature = "std")]
208pub mod parsing;
209
210#[cfg(feature = "alloc")]
212pub use blocks::DataType;
213#[cfg(feature = "alloc")]
214pub use error::{Error, Result};
215#[cfg(feature = "alloc")]
216pub use types::DecodedValue;
217#[cfg(feature = "alloc")]
218pub use writer::MdfWriter;
219#[cfg(feature = "alloc")]
220pub use writer::{FlushPolicy, StreamingConfig};
221
222#[cfg(feature = "std")]
223pub use channel::Channel;
224#[cfg(feature = "std")]
225pub use channel_group::ChannelGroup;
226#[cfg(feature = "std")]
227pub use cut::cut_mdf_by_time;
228#[cfg(feature = "std")]
229pub use index::{BufferedRangeReader, ByteRangeReader, FileRangeReader, MdfIndex};
230#[cfg(feature = "std")]
231pub use mdf::MDF;
232#[cfg(feature = "std")]
233pub use merge::merge_files;