noodles_fasta/io/
indexed_reader.rs1mod builder;
4
5pub use self::builder::Builder;
6
7use std::io::{self, BufRead, Seek};
8
9use noodles_core::Region;
10
11use super::Reader;
12use crate::{fai, Record};
13
14pub struct IndexedReader<R> {
16 inner: Reader<R>,
17 index: fai::Index,
18}
19
20impl<R> IndexedReader<R>
21where
22 R: BufRead,
23{
24 pub fn new(inner: R, index: fai::Index) -> Self {
26 Self {
27 inner: Reader::new(inner),
28 index,
29 }
30 }
31
32 pub fn get_ref(&self) -> &R {
34 self.inner.get_ref()
35 }
36
37 pub fn get_mut(&mut self) -> &mut R {
39 self.inner.get_mut()
40 }
41
42 pub fn into_inner(self) -> R {
44 self.inner.into_inner()
45 }
46
47 pub fn read_definition(&mut self, buf: &mut String) -> io::Result<usize> {
49 self.inner.read_definition(buf)
50 }
51
52 pub fn read_sequence(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> {
54 self.inner.read_sequence(buf)
55 }
56
57 pub fn index(&self) -> &fai::Index {
59 &self.index
60 }
61}
62
63impl<R> IndexedReader<R>
64where
65 R: BufRead + Seek,
66{
67 pub fn query(&mut self, region: &Region) -> io::Result<Record> {
69 self.inner.query(&self.index, region)
70 }
71}