twitcher 0.6.7

Find template switch mutations in genomic data
use clap::Args;
use rust_htslib::bam;

const DEFAULT_EXCL_FLAG: u16 = 3852;

#[derive(Args, Clone, Copy, Debug)]
pub struct BamFilters {
    /// Only include in output reads that have ALL of the FLAGs present
    #[arg(short = 'f', long, value_name = "FLAG", default_value_t = 0)]
    require_flags: u16,

    /// Only include in output reads that have NONE of the FLAGs present
    #[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
    }
}