mod bam_record_ext;
mod binning;
mod cli;
mod config;
mod raw_bam_pipeline;
mod reader;
mod record;
mod writer;
mod pbar;
use std::path::Path;
use anyhow::Result;
use clap::Parser;
use config::default_worker_count;
use raw_bam_pipeline::{PipelineConfig, run_pipeline};
fn main() -> Result<()> {
let args = cli::CliArgs::parse();
if !Path::new(&args.bam_file).exists() {
eprintln!("错误: 找不到文件 '{}'", args.bam_file);
std::process::exit(1);
}
println!("处理 BAM: {}", args.bam_file);
let worker_count = if args.workers > 0 {
args.workers
} else {
default_worker_count()
};
let pipeline_cfg = PipelineConfig::new(worker_count);
let out_path = Path::new(&args.output_dir);
match args.commands {
cli::Commands::RawBam(raw_bam_args) => {
run_pipeline(&args.bam_file, &pipeline_cfg, raw_bam_args.slice_n, out_path);
}
cli::Commands::AlignedBam(args) => {}
}
Ok(())
}