mod.rs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use anyhow::{Ok, Result};
  2. use bgzip::BGZFReader;
  3. use indicatif::MultiProgress;
  4. use std::{
  5. fs::{File, Metadata},
  6. io::BufReader,
  7. };
  8. use crate::utils::{new_pg_speed, new_pg_bytes};
  9. pub mod dict_reader;
  10. pub mod vcf_reader;
  11. pub mod vcf_writer;
  12. pub fn get_reader(path: &str) -> Result<Box<dyn std::io::Read>> {
  13. let file_type = *path.split(".").collect::<Vec<&str>>().last().unwrap();
  14. assert!(file_type == "gz" || file_type == "vcf");
  15. let raw_reader: Box<dyn std::io::Read> = Box::new(File::open(path)?);
  16. match file_type {
  17. "gz" => {
  18. let reader = Box::new(BGZFReader::new(raw_reader)?);
  19. Ok(Box::new(BufReader::new(reader)))
  20. }
  21. "vcf" => {
  22. // let reader = Box::new(BzDecoder::new(raw_reader));
  23. Ok(Box::new(BufReader::new(raw_reader)))
  24. }
  25. t => {
  26. panic!("unknown file type: {}", t)
  27. }
  28. }
  29. }
  30. pub fn get_reader_progress(
  31. path: &str,
  32. mp: &MultiProgress,
  33. ) -> Result<Box<dyn std::io::Read>> {
  34. let file_type = *path.split(".").collect::<Vec<&str>>().last().unwrap();
  35. assert!(file_type == "gz" || file_type == "vcf");
  36. let file = File::open(path)?;
  37. let metadata = file.metadata()?;
  38. let pg = mp.add(new_pg_bytes(metadata.len() as u64));
  39. pg.set_message(format!("Reading {path}"));
  40. let raw_reader: Box<dyn std::io::Read> = Box::new(file);
  41. let raw_reader = pg.wrap_read(raw_reader);
  42. match file_type {
  43. "gz" => {
  44. let reader = Box::new(BGZFReader::new(raw_reader)?);
  45. Ok(Box::new(BufReader::new(reader)))
  46. }
  47. "vcf" => {
  48. // let reader = Box::new(BzDecoder::new(raw_reader));
  49. Ok(Box::new(BufReader::new(raw_reader)))
  50. }
  51. t => {
  52. panic!("unknown file type: {}", t)
  53. }
  54. }
  55. }