seqtk-rs 0.2.0

This is a sequence processing tool written in Rust for manipulating FASTA/FASTQ files. Pure rust version of seqtk.
Documentation
use std::collections::HashMap;

#[derive(Debug)]
pub struct Q2PConverter(HashMap<u8, f64>);
impl Q2PConverter {
    pub fn new(asciibase: u8) -> Self {
        let table = (0..180)
            .map(|i| (i as u8 + asciibase, convert_q_score_to_p_err(i as f64)))
            .collect::<HashMap<_, _>>();
        Q2PConverter(table)
    }
    pub fn get_prob(&self, idx: u8) -> f64 {
        *self.0.get(&idx).expect("Index out of range")
    }
}

pub fn convert_p_err_to_q_score(p_err: f64) -> f64 {
    -10.0 * p_err.log10()
}
pub fn convert_q_score_to_p_err(q_score: f64) -> f64 {
    10.0f64.powf(-q_score / 10.0)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_qp_converter() {
        let table = Q2PConverter::new(0);
        assert_eq!(table.get_prob(0), 1.0);
        assert_eq!(table.get_prob(13), convert_q_score_to_p_err(13.0));
        assert_eq!(table.get_prob(90), convert_q_score_to_p_err(90.0));
    }
}