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 #[deprecated(
79 since = "0.78.0",
80 note = "Use `IndexedReader::read_container` instead."
81 )]
82 pub fn read_data_container(&mut self) -> io::Result<Option<Container>> {
83 #[allow(deprecated)]
84 self.inner.read_data_container()
85 }
86
87 pub fn records<'r>(&'r mut self, header: &'r sam::Header) -> Records<'r, R> {
89 self.inner.records(header)
90 }
91
92 pub fn index(&self) -> &crai::Index {
94 &self.index
95 }
96}
97
98impl<R> IndexedReader<R>
99where
100 R: Read + Seek,
101{
102 pub fn query<'a>(
104 &'a mut self,
105 header: &'a sam::Header,
106 region: &Region,
107 ) -> io::Result<Query<'a, R>> {
108 self.inner.query(header, &self.index, region)
109 }
110}