fxtools 0.2.39

A collection of commandline Fasta/Fastq utility tools
use anyhow::Result;
use clap::Parser;
use cli::{Cli, Commands};

mod cli;
mod commands;

fn main() -> Result<()> {
    let cli = Cli::parse();

    match cli.command {
        Commands::Cat {
            inputs,
            output,
            sequence_only,
            headers_only,
            single_line,
        } => {
            commands::cat::run(
                inputs,
                output,
                sequence_only,
                headers_only,
                single_line,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Count { input } => {
            commands::count::run(input)?;
        }
        Commands::Clip {
            input,
            output,
            start,
            end,
            range,
        } => {
            commands::clip::run(
                input,
                output,
                start,
                end,
                range,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::CsvToFasta {
            input,
            output,
            header_col,
            sequence_col,
            delim,
        } => {
            commands::csv::run(
                input,
                output,
                header_col,
                sequence_col,
                delim,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Disambiseq {
            input,
            output,
            include_parents,
        } => {
            commands::disambiseq::run(
                input,
                output,
                include_parents,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::ExtractVariable {
            input,
            output,
            num_samples,
            zscore_threshold,
        } => {
            commands::extract::run(
                &input,
                output,
                num_samples,
                zscore_threshold,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Filter {
            input,
            output,
            pattern,
            invert,
            header,
        } => {
            commands::filter::run(
                input,
                output,
                pattern,
                invert,
                header,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Fix { input, output } => {
            commands::fix::run(
                input,
                output,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Multiplex {
            input,
            output,
            whitelist,
            output_whitelist,
            log,
            barcode_size,
            seed,
            timeout,
        } => {
            commands::multiplex::run(
                input,
                output,
                whitelist,
                output_whitelist,
                log,
                barcode_size,
                seed,
                timeout,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Reverse { input, output } => {
            commands::reverse::run(
                input,
                output,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Sample {
            input,
            output,
            frequency,
            seed,
            quiet,
        } => {
            commands::sample::run(
                input,
                output,
                frequency,
                seed,
                quiet,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::SgrnaTable {
            input,
            output,
            include_sequence,
            tss_ignore,
            delim,
            reorder,
        } => {
            commands::sgrna_table::run(
                input,
                output,
                include_sequence,
                tss_ignore,
                delim,
                reorder,
            )?;
        }
        Commands::Sort {
            r1,
            r2,
            prefix,
            gzip,
            sort_by_r1,
        } => {
            commands::sort::run(
                r1,
                r2,
                prefix,
                gzip,
                sort_by_r1,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::T2g {
            input,
            output,
            symbol,
            dot_version,
        } => {
            commands::t2g::run(
                input,
                output,
                symbol,
                dot_version,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Take {
            input,
            output,
            num_records,
            skip,
        } => {
            commands::take::run(
                input,
                output,
                num_records,
                skip,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Trim {
            input,
            output,
            adapter,
            trim_adapter,
        } => {
            commands::trim::run(
                input,
                &adapter,
                output,
                trim_adapter,
                cli.compression_threads,
                cli.compression_level,
            )?;
        }
        Commands::Unique {
            input,
            output,
            null,
            allow_invalid,
        } => {
            commands::unique::run(
                input,
                output,
                null,
                cli.compression_threads,
                cli.compression_level,
                allow_invalid,
            )?;
        }
        Commands::Upper {
            input,
            output,
            allow_invalid,
        } => {
            commands::upper::run(
                input,
                output,
                cli.compression_threads,
                cli.compression_level,
                allow_invalid,
            )?;
        }
    };

    Ok(())
}