noodles_fasta/repository/adapters/
indexed_reader.rs

1use std::io::{self, BufRead, Seek};
2
3use noodles_core::Region;
4
5use crate::{repository::Adapter, Record};
6
7/// An indexed reader adapter.
8pub struct IndexedReader<R> {
9    reader: crate::io::IndexedReader<R>,
10}
11
12impl<R> IndexedReader<R>
13where
14    R: BufRead + Seek,
15{
16    /// Creates an indexed reader adapter.
17    ///
18    /// # Examples
19    ///
20    /// ```
21    /// # use std::io;
22    /// use noodles_fasta::{self as fasta, fai, repository::adapters::IndexedReader};
23    /// let index = fai::Index::default();
24    /// let reader = fasta::io::IndexedReader::new(io::empty(), index);
25    /// let adapter = IndexedReader::new(reader);
26    /// ```
27    pub fn new(reader: crate::io::IndexedReader<R>) -> Self {
28        Self { reader }
29    }
30}
31
32impl<R> Adapter for IndexedReader<R>
33where
34    R: BufRead + Seek + Send + Sync,
35{
36    fn get(&mut self, name: &[u8]) -> Option<io::Result<Record>> {
37        let region = Region::new(name, ..);
38        Some(self.reader.query(&region))
39    }
40}