use std::fs::{metadata, File};
use std::io::{BufReader, Read};
#[inline]
pub fn generic_open_file(filename: &str) -> (usize, bool, Box<dyn Read + Send>) {
let filesize = metadata(filename)
.unwrap_or_else(|_| panic!("{}", &format!("Unable to open file: {}", filename)))
.len();
let file = match File::open(filename) {
Err(why) => panic!("Couldn't open {}: {}", filename, why),
Ok(file) => file,
};
let file = BufReader::new(file);
let mut compressed: bool = false;
let fasta: Box<dyn Read + Send> = if filename.ends_with("gz") {
compressed = true;
Box::new(flate2::read::GzDecoder::new(file))
} else if filename.ends_with("snappy") || filename.ends_with("sz") || filename.ends_with("sfai")
{
compressed = true;
Box::new(snap::read::FrameDecoder::new(file))
} else {
Box::new(file)
};
(filesize as usize, compressed, fasta)
}
#[cfg(test)]
mod tests {}