paraseq 0.4.14

A minimal-copy parser for FASTA and FASTQ files built for paired parallel processing.
Documentation
//! Format conversion (FASTA <-> FASTQ) using the path/stdin-aware
//! `fastx::Reader::from_optional_path`, with transparent decompression of
//! `.gz`/`.zst`/etc inputs via `niffler`.
//!
//! ```sh
//! cargo run --release --example read_write -- data/sample.fastq.gz --format fasta
//! ```

#[path = "common/mod.rs"]
#[allow(dead_code)]
mod common;

use anyhow::Result;
use clap::Parser;
use common::{output_handle, OutputFormat, Writer};
use paraseq::{fastx, prelude::*};

#[derive(Parser)]
struct Cli {
    /// Input file path (reads stdin if omitted)
    input: Option<String>,

    /// Output file path (writes stdout if omitted)
    #[clap(short, long)]
    output: Option<String>,

    /// Number of threads to use (0 = all available cores)
    #[clap(short = 'T', long, default_value_t = 0)]
    threads: usize,

    /// Output format
    #[clap(short, long, default_value = "fasta")]
    format: OutputFormat,
}

fn main() -> Result<()> {
    let args = Cli::parse();
    let reader = fastx::Reader::from_optional_path(args.input)?;
    let mut processor = Writer::new(output_handle(&args.output)?, args.format);

    reader.process_parallel(&mut processor, args.threads)?;

    Ok(())
}