noodles_bcf/io/reader/
builder.rs1use std::{
2 fs::File,
3 io::{self, Read},
4 path::Path,
5};
6
7use noodles_bgzf as bgzf;
8
9use super::Reader;
10use crate::io::CompressionMethod;
11
12#[derive(Default)]
14pub struct Builder {
15 compression_method: Option<CompressionMethod>,
16}
17
18impl Builder {
19 pub fn set_compression_method(mut self, compression_method: CompressionMethod) -> Self {
28 self.compression_method = Some(compression_method);
29 self
30 }
31
32 pub fn build_from_path<P>(self, src: P) -> io::Result<Reader<Box<dyn Read>>>
42 where
43 P: AsRef<Path>,
44 {
45 let file = File::open(src)?;
46 self.build_from_reader(file)
47 }
48
49 pub fn build_from_reader<'r, R>(self, reader: R) -> io::Result<Reader<Box<dyn Read + 'r>>>
59 where
60 R: Read + 'r,
61 {
62 let inner: Box<dyn Read> = match self.compression_method {
63 Some(CompressionMethod::Bgzf) | None => Box::new(bgzf::Reader::new(reader)),
64 Some(CompressionMethod::None) => Box::new(reader),
65 };
66
67 Ok(Reader::from(inner))
68 }
69}