use clap::Args;
use rust_htslib::bam;
const DEFAULT_EXCL_FLAG: u16 = 3852;
#[derive(Args, Clone, Copy, Debug)]
pub struct BamFilters {
#[arg(short = 'f', long, value_name = "FLAG", default_value_t = 0)]
require_flags: u16,
#[arg(short = 'F', long, value_name = "FLAG", default_value_t = DEFAULT_EXCL_FLAG)]
exclude_flags: u16,
}
impl Default for BamFilters {
fn default() -> Self {
Self {
require_flags: 0,
exclude_flags: DEFAULT_EXCL_FLAG,
}
}
}
impl BamFilters {
pub fn apply(self, rec: &bam::Record) -> bool {
let flags = rec.flags();
let req_pass = (self.require_flags & flags) == self.require_flags;
let excl_pass = (self.exclude_flags & flags) == 0;
req_pass && excl_pass
}
}