| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- use anyhow::{Ok, Result};
- use bgzip::BGZFReader;
- use indicatif::MultiProgress;
- use std::{
- fs::{File, Metadata},
- io::BufReader,
- };
- use crate::utils::{new_pg_speed, new_pg_bytes};
- pub mod dict_reader;
- pub mod vcf_reader;
- pub mod vcf_writer;
- pub fn get_reader(path: &str) -> Result<Box<dyn std::io::Read>> {
- let file_type = *path.split(".").collect::<Vec<&str>>().last().unwrap();
- assert!(file_type == "gz" || file_type == "vcf");
- let raw_reader: Box<dyn std::io::Read> = Box::new(File::open(path)?);
- match file_type {
- "gz" => {
- let reader = Box::new(BGZFReader::new(raw_reader)?);
- Ok(Box::new(BufReader::new(reader)))
- }
- "vcf" => {
- // let reader = Box::new(BzDecoder::new(raw_reader));
- Ok(Box::new(BufReader::new(raw_reader)))
- }
- t => {
- panic!("unknown file type: {}", t)
- }
- }
- }
- pub fn get_reader_progress(
- path: &str,
- mp: &MultiProgress,
- ) -> Result<Box<dyn std::io::Read>> {
- let file_type = *path.split(".").collect::<Vec<&str>>().last().unwrap();
- assert!(file_type == "gz" || file_type == "vcf");
- let file = File::open(path)?;
- let metadata = file.metadata()?;
- let pg = mp.add(new_pg_bytes(metadata.len() as u64));
- pg.set_message(format!("Reading {path}"));
- let raw_reader: Box<dyn std::io::Read> = Box::new(file);
- let raw_reader = pg.wrap_read(raw_reader);
- match file_type {
- "gz" => {
- let reader = Box::new(BGZFReader::new(raw_reader)?);
- Ok(Box::new(BufReader::new(reader)))
- }
- "vcf" => {
- // let reader = Box::new(BzDecoder::new(raw_reader));
- Ok(Box::new(BufReader::new(raw_reader)))
- }
- t => {
- panic!("unknown file type: {}", t)
- }
- }
- }
|