fastq 0.6.0

A parser for fastq
Documentation
use fastq::{parse_path, Record};
use std::env::args;
use parasailors as align;

extern crate fastq;
extern crate parasailors;

const ADAPTER: &'static [u8] = b"AATGATACGGCGACCACCGAGA\
                                 TCTACACTCTTTCCCTACACGA\
                                 CGCTCTTCCGATCT";

fn main() {
    let filename = args().nth(1);
    let path = match filename.as_ref().map(String::as_ref) {
        None | Some("-") => { None },
        Some(name) => Some(name)
    };

    let results = parse_path(path, |parser| {
        let nthreads = 2;
        let results: Vec<usize> = parser.parallel_each(nthreads, |record_sets| {
            let matrix = align::Matrix::new(align::MatrixType::Identity);
            let profile = align::Profile::new(ADAPTER, &matrix);
            let mut thread_total = 0;

            for record_set in record_sets {
                for record in record_set.iter() {
                    let score = align::local_alignment_score(
                            &profile, record.seq(), 8, 1);
                    if score > 10 {
                        thread_total += 1;
                    }
                }
            }
            thread_total
        }).expect("Invalid fastq file");
        results
    }).expect("Invalid compression");
    println!("{}", results.iter().sum::<usize>());
}