hts 0.1.18

Rust binding for htslib
Documentation
use crate::Nucleotide;

pub struct SeqIter<'a> {
    offset: usize,
    full_last: bool,
    data: &'a [u8],
}

impl<'a> Iterator for SeqIter<'a> {
    type Item = Nucleotide;
    fn next(&mut self) -> Option<Self::Item> {
        let total_size = self.data.len() * 2 - if self.full_last { 0 } else { 1 };
        if self.offset < total_size {
            let code = (self.data[self.offset / 2] >> (((1 + self.offset) % 2) * 4)) & 0xf;
            self.offset += 1;
            return Some(code.into());
        }
        None
    }
}

impl<'a> super::Alignment<'a> {
    pub fn sequence(&self) -> SeqIter {
        let (data, full_last) = self.raw_seq();
        SeqIter {
            offset: 0,
            full_last,
            data,
        }
    }

    pub fn per_base_qual(&self) -> &[u8] {
        self.raw_per_base_qual()
    }
}