noodles_cram/io/reader/builder.rs
1use std::{
2 fs::File,
3 io::{self, Read},
4 path::Path,
5};
6
7use noodles_fasta as fasta;
8
9use super::Reader;
10
11/// A CRAM reader builder.
12#[derive(Debug, Default)]
13pub struct Builder {
14 reference_sequence_repository: fasta::Repository,
15}
16
17impl Builder {
18 /// Sets the reference sequence repository.
19 ///
20 /// # Examples
21 ///
22 /// ```
23 /// use noodles_cram::io::reader::Builder;
24 /// use noodles_fasta as fasta;
25 ///
26 /// let reference_sequence_repository = fasta::Repository::default();
27 ///
28 /// let builder = Builder::default()
29 /// .set_reference_sequence_repository(reference_sequence_repository);
30 /// ```
31 pub fn set_reference_sequence_repository(
32 mut self,
33 reference_sequence_repository: fasta::Repository,
34 ) -> Self {
35 self.reference_sequence_repository = reference_sequence_repository;
36 self
37 }
38
39 /// Builds a CRAM reader from a path.
40 ///
41 /// # Examples
42 ///
43 /// ```no_run
44 /// use noodles_cram::io::reader::Builder;
45 /// let reader = Builder::default().build_from_path("sample.cram")?;
46 /// # Ok::<_, std::io::Error>(())
47 /// ````
48 pub fn build_from_path<P>(self, src: P) -> io::Result<Reader<File>>
49 where
50 P: AsRef<Path>,
51 {
52 File::open(src).map(|file| self.build_from_reader(file))
53 }
54
55 /// Builds a CRAM reader from a reader.
56 ///
57 /// # Examples
58 ///
59 /// ```
60 /// # use std::io;
61 /// use noodles_cram::io::reader::Builder;
62 /// let reader = Builder::default().build_from_reader(io::empty());
63 /// # Ok::<_, io::Error>(())
64 /// ```
65 pub fn build_from_reader<R>(self, reader: R) -> Reader<R>
66 where
67 R: Read,
68 {
69 Reader {
70 inner: reader,
71 reference_sequence_repository: self.reference_sequence_repository,
72 }
73 }
74}