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}