count/
count.rs

1use std::{error::Error, path::PathBuf, time::Instant};
2
3use fallible_iterator::FallibleIterator;
4use fast_dlt::file::DltFile;
5
6fn main() -> Result<(), Box<dyn Error>> {
7    let Some(path) = std::env::args().nth(1).map(PathBuf::from) else {
8      return Err("This example expects a path to a DLT file!".into());  
9    };
10
11    let data = std::fs::read(path)?;
12
13    let file = DltFile::new(&data);
14
15    let start = Instant::now();
16    let count = file.count()?;
17    let elapsed = start.elapsed();
18
19    println!(
20        "Parsed {count} messages in {:.2} ({:.2} per second, {:.2} MiB/s)",
21        elapsed.as_secs_f32(),
22        count as f64 / elapsed.as_secs_f64(),
23        (data.len() as f64 / f64::from(1024 * 1024) / elapsed.as_secs_f64())
24    );
25    Ok(())
26}