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}