noodles_fasta/io/reader/
builder.rs1use std::{
2 fs::File,
3 io::{self, BufRead, BufReader},
4 path::Path,
5};
6
7use noodles_bgzf as bgzf;
8
9use super::Reader;
10
11#[derive(Debug, Default)]
13pub struct Builder;
14
15impl Builder {
16 pub fn build_from_path<P>(self, src: P) -> io::Result<Reader<Box<dyn BufRead>>>
18 where
19 P: AsRef<Path>,
20 {
21 let src = src.as_ref();
22
23 let file = File::open(src)?;
24
25 let reader: Box<dyn BufRead> = match src.extension().and_then(|ext| ext.to_str()) {
26 Some("gz" | "bgz") => Box::new(bgzf::Reader::new(file)),
27 _ => Box::new(BufReader::new(file)),
28 };
29
30 self.build_from_reader(reader)
31 }
32
33 pub fn build_from_reader<R>(self, reader: R) -> io::Result<Reader<R>>
35 where
36 R: BufRead,
37 {
38 Ok(Reader::new(reader))
39 }
40}