noodles_cram/async/io/reader/
builder.rs

1use std::path::Path;
2
3use noodles_fasta as fasta;
4use tokio::{
5    fs::File,
6    io::{self, AsyncRead},
7};
8
9use super::Reader;
10
11/// An async CRAM reader builder.
12#[derive(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::r#async::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 an async CRAM reader from a path.
40    ///
41    /// # Examples
42    ///
43    /// ```no_run
44    /// # #[tokio::main]
45    /// # async fn main() -> tokio::io::Result<()> {
46    /// use noodles_cram::r#async::io::reader::Builder;
47    /// let _reader = Builder::default().build_from_path("sample.cram").await?;
48    /// # Ok(())
49    /// # }
50    /// ```
51    pub async fn build_from_path<P>(self, src: P) -> io::Result<Reader<File>>
52    where
53        P: AsRef<Path>,
54    {
55        File::open(src)
56            .await
57            .map(|file| self.build_from_reader(file))
58    }
59
60    /// Builds an async CRAM reader from a reader.
61    ///
62    /// # Examples
63    ///
64    /// ```
65    /// use noodles_cram::r#async::io::reader::Builder;
66    /// use tokio::io;
67    /// let _reader = Builder::default().build_from_reader(io::empty());
68    /// ```
69    pub fn build_from_reader<R>(self, reader: R) -> Reader<R>
70    where
71        R: AsyncRead + Unpin,
72    {
73        Reader {
74            inner: reader,
75            reference_sequence_repository: self.reference_sequence_repository,
76        }
77    }
78}