use std::path::PathBuf;
use clap::Parser;
use mseed::{MSControlFlags, MSDataEncoding, MSReader, MSRecord, MSTraceList, TlPackInfo};
#[derive(Parser, Debug)]
#[command(author, version)]
#[command(about = "Illustrates using a trace list as an itermediate rolling buffer")]
#[command( long_about = None)]
struct Args {
#[arg(value_name = "FILE")]
in_file: PathBuf,
}
fn main() {
let args = Args::parse();
let mut mstl = MSTraceList::new().unwrap();
let pack_info = TlPackInfo {
encoding: MSDataEncoding::Steim2,
rec_len: 256,
extra_headers: None,
};
let record_handler = |rec: &[u8]| {
let mut buf = rec.to_vec();
let msr = MSRecord::parse(&mut buf, MSControlFlags::MSF_UNPACKDATA).unwrap();
print!("{}", msr.display(0));
};
let mut reader = MSReader::new_with_flags(
args.in_file,
MSControlFlags::MSF_VALIDATECRC | MSControlFlags::MSF_UNPACKDATA,
)
.unwrap();
while let Some(msr) = reader.next() {
let msr = msr.unwrap();
mstl.insert(msr, true).unwrap();
let (cnt_records, cnt_samples) = mseed::pack_trace_list(
&mut mstl,
record_handler,
&pack_info,
MSControlFlags::empty(),
)
.unwrap();
println!(
"mseed::pack_trace_list() created {} records containing {} samples, totally",
cnt_records, cnt_samples
);
}
let (cnt_records, cnt_samples) = mseed::pack_trace_list(
&mut mstl,
record_handler,
&pack_info,
MSControlFlags::MSF_FLUSHDATA,
)
.unwrap();
println!(
"Final mseed::pack_trace_list() created {} records containing {} samples, totally",
cnt_records, cnt_samples
);
}