use bgzip::read::BGZFReader; use clap::Parser; use std::fs::File; use std::io::prelude::*; #[cfg(not(feature = "rayon"))] #[derive(Debug, Parser)] struct Cli { #[command()] input_file: String, #[arg(short, long)] output: String, } #[cfg(feature = "rayon")] #[derive(Debug, Parser)] struct Cli { #[command()] input_file: String, #[arg(short, long)] output: String, #[arg(short = '@', long)] thread: Option, } fn main() -> anyhow::Result<()> { let cli = Cli::parse(); let file_reader = File::open(&cli.input_file)?; let mut file_writer = File::create(&cli.output)?; #[cfg(feature = "rayon")] let mut reader: Box = if let Some(thread) = cli.thread { rayon::ThreadPoolBuilder::new() .num_threads(thread) .build_global()?; Box::new(bgzip::read::BGZFMultiThreadReader::new(file_reader)?) } else { Box::new(BGZFReader::new(file_reader)?) }; #[cfg(not(feature = "rayon"))] let mut reader = BGZFReader::new(file_reader)?; std::io::copy(&mut reader, &mut file_writer)?; Ok(()) }