noodles_cram/io/
indexed_reader.rs1mod builder;
4
5pub use self::builder::Builder;
6
7use std::io::{self, Read, Seek};
8
9use noodles_core::Region;
10use noodles_fasta as fasta;
11use noodles_sam as sam;
12
13use super::{
14 reader::{Container, Query, Records},
15 Reader,
16};
17use crate::{crai, FileDefinition};
18
19pub struct IndexedReader<R> {
21 inner: Reader<R>,
22 index: crai::Index,
23}
24
25impl<R> IndexedReader<R>
26where
27 R: Read,
28{
29 pub fn new(inner: R, index: crai::Index) -> Self {
31 Self {
32 inner: Reader::new(inner),
33 index,
34 }
35 }
36
37 pub fn get_ref(&self) -> &R {
39 self.inner.get_ref()
40 }
41
42 pub fn get_mut(&mut self) -> &mut R {
44 self.inner.get_mut()
45 }
46
47 pub fn into_inner(self) -> R {
49 self.inner.into_inner()
50 }
51
52 pub fn reference_sequence_repository(&self) -> &fasta::Repository {
54 self.inner.reference_sequence_repository()
55 }
56
57 pub fn read_file_definition(&mut self) -> io::Result<FileDefinition> {
59 self.inner.read_file_definition()
60 }
61
62 pub fn read_file_header(&mut self) -> io::Result<sam::Header> {
64 self.inner.read_file_header()
65 }
66
67 pub fn read_header(&mut self) -> io::Result<sam::Header> {
69 self.inner.read_header()
70 }
71
72 pub fn read_container(&mut self, container: &mut Container) -> io::Result<usize> {
74 self.inner.read_container(container)
75 }
76
77 pub fn records<'r>(&'r mut self, header: &'r sam::Header) -> Records<'r, R> {
79 self.inner.records(header)
80 }
81
82 pub fn index(&self) -> &crai::Index {
84 &self.index
85 }
86}
87
88impl<R> IndexedReader<R>
89where
90 R: Read + Seek,
91{
92 pub fn query<'a>(
94 &'a mut self,
95 header: &'a sam::Header,
96 region: &Region,
97 ) -> io::Result<Query<'a, R>> {
98 self.inner.query(header, &self.index, region)
99 }
100}