noodles_bcf/io/reader/
record_bufs.rs

1use std::io::{self, Read};
2
3use noodles_vcf::{self as vcf, variant::RecordBuf};
4
5use super::Reader;
6
7/// An iterator over records of a BCF reader.
8///
9/// This is created by calling [`Reader::records`].
10pub struct RecordBufs<'r, 'h, R>
11where
12    R: Read,
13{
14    reader: &'r mut Reader<R>,
15    header: &'h vcf::Header,
16    record: RecordBuf,
17}
18
19impl<'r, 'h, R> RecordBufs<'r, 'h, R>
20where
21    R: Read,
22{
23    pub(crate) fn new(reader: &'r mut Reader<R>, header: &'h vcf::Header) -> Self {
24        Self {
25            reader,
26            header,
27            record: RecordBuf::default(),
28        }
29    }
30}
31
32impl<R> Iterator for RecordBufs<'_, '_, R>
33where
34    R: Read,
35{
36    type Item = io::Result<RecordBuf>;
37
38    fn next(&mut self) -> Option<Self::Item> {
39        match self.reader.read_record_buf(self.header, &mut self.record) {
40            Ok(0) => None,
41            Ok(_) => Some(Ok(self.record.clone())),
42            Err(e) => Some(Err(e)),
43        }
44    }
45}