use std::io::{BufReader, Cursor};
use binseq::bq::{BinseqHeaderBuilder, StreamReader, StreamWriterBuilder};
use binseq::{BinseqRecord, Policy, Result};
fn main() -> Result<()> {
let header = BinseqHeaderBuilder::new().slen(100).build()?;
let sequence = b"ACGT".repeat(25);
let mut writer = StreamWriterBuilder::default()
.header(header)
.policy(Policy::RandomDraw) .buffer_capacity(4096) .build(Cursor::new(Vec::new()))?;
writer.write_record(Some(0), &sequence)?;
writer.write_record(Some(1), &sequence)?;
let buffer = writer.into_inner()?;
let buffer_inner = buffer.into_inner();
println!("Wrote {} bytes to buffer", buffer_inner.len());
let cursor = Cursor::new(buffer_inner);
let buf_reader = BufReader::new(cursor);
let mut reader = StreamReader::new(buf_reader);
let header = reader.read_header()?;
println!("Read header: sequence length = {}", header.slen);
let mut count = 0;
while let Some(record) = reader.next_record() {
let record = record?;
println!("Record {}: flag = {:?}", count, record.flag());
count += 1;
}
println!("Read {count} records");
Ok(())
}