#![forbid(unsafe_code)]
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(feature = "std", doc = "### Reading an MDF file")]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = "```no_run")]
#![cfg_attr(feature = "std", doc = "use mdf4_rs::{MDF, Result};")]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = "fn main() -> Result<()> {")]
#![cfg_attr(
feature = "std",
doc = " let mdf = MDF::from_file(\"recording.mf4\")?;"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = " for group in mdf.channel_groups() {")]
#![cfg_attr(
feature = "std",
doc = " println!(\"Group: {:?}\", group.name()?);"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = " for channel in group.channels() {")]
#![cfg_attr(
feature = "std",
doc = " let name = channel.name()?.unwrap_or_default();"
)]
#![cfg_attr(feature = "std", doc = " let values = channel.values()?;")]
#![cfg_attr(
feature = "std",
doc = " let valid_count = values.iter().filter(|v| v.is_some()).count();"
)]
#![cfg_attr(
feature = "std",
doc = " println!(\" {}: {} valid samples\", name, valid_count);"
)]
#![cfg_attr(feature = "std", doc = " }")]
#![cfg_attr(feature = "std", doc = " }")]
#![cfg_attr(feature = "std", doc = " Ok(())")]
#![cfg_attr(feature = "std", doc = "}")]
#![cfg_attr(feature = "std", doc = "```")]
#![cfg_attr(feature = "std", doc = "### Using the Index for Efficient Access")]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = "```no_run")]
#![cfg_attr(
feature = "std",
doc = "use mdf4_rs::{MdfIndex, FileRangeReader, Result};"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = "fn main() -> Result<()> {")]
#![cfg_attr(feature = "std", doc = " // Create an index from a file")]
#![cfg_attr(
feature = "std",
doc = " let index = MdfIndex::from_file(\"recording.mf4\")?;"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = " // Save index for later use")]
#![cfg_attr(
feature = "std",
doc = " index.save_to_file(\"recording.mdf4.index\")?;"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = " // Load index and read specific channel")]
#![cfg_attr(
feature = "std",
doc = " let index = MdfIndex::load_from_file(\"recording.mdf4.index\")?;"
)]
#![cfg_attr(
feature = "std",
doc = " let mut reader = FileRangeReader::new(\"recording.mf4\")?;"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(
feature = "std",
doc = " let values = index.read_channel_values_by_name(\"Temperature\", &mut reader)?;"
)]
#![cfg_attr(
feature = "std",
doc = " println!(\"Read {} values\", values.len());"
)]
#![cfg_attr(feature = "std", doc = "")]
#![cfg_attr(feature = "std", doc = " Ok(())")]
#![cfg_attr(feature = "std", doc = "}")]
#![cfg_attr(feature = "std", doc = "```")]
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(feature = "alloc")]
mod types;
#[cfg(feature = "alloc")]
pub mod blocks;
#[cfg(feature = "alloc")]
pub mod error;
#[cfg(feature = "alloc")]
pub mod writer;
#[cfg(feature = "alloc")]
pub mod bus_logging;
#[cfg(feature = "alloc")]
pub mod can;
#[cfg(feature = "alloc")]
pub mod ethernet;
#[cfg(feature = "alloc")]
pub mod lin;
#[cfg(feature = "alloc")]
pub mod flexray;
#[cfg(feature = "std")]
mod channel;
#[cfg(feature = "std")]
mod channel_group;
#[cfg(feature = "std")]
pub mod cut;
#[cfg(feature = "std")]
pub mod index;
#[cfg(feature = "std")]
mod mdf;
#[cfg(feature = "std")]
pub mod merge;
#[cfg(feature = "std")]
pub mod parsing;
#[cfg(feature = "alloc")]
pub use blocks::DataType;
#[cfg(feature = "alloc")]
pub use error::{Error, Result};
#[cfg(feature = "alloc")]
pub use types::DecodedValue;
#[cfg(feature = "alloc")]
pub use writer::MdfWriter;
#[cfg(feature = "alloc")]
pub use writer::{FlushPolicy, StreamingConfig};
#[cfg(feature = "std")]
pub use channel::{Channel, ChannelValuesIter};
#[cfg(feature = "std")]
pub use channel_group::ChannelGroup;
#[cfg(feature = "std")]
pub use cut::cut_mdf_by_time;
#[cfg(feature = "std")]
pub use index::{BufferedRangeReader, ByteRangeReader, FileRangeReader, MdfIndex};
#[cfg(feature = "std")]
pub use mdf::MDF;
#[cfg(feature = "std")]
pub use merge::merge_files;