seqtkrs 0.1.1

A Rust reimplementation of seqtk, a fast and lightweight tool for processing biological sequences in FASTA/FASTQ format
Documentation
//! seqtkrs - seqtk的Rust实现
//!
//! 这是一个快速、轻量级的生物序列(FASTA/FASTQ)处理工具集

use anyhow::Result;
use clap::{Parser, Subcommand};
use seqtkrs::commands;

/// seqtkrs - 快速轻量的生物序列处理工具集
#[derive(Parser, Debug)]
#[command(name = "seqtkrs")]
#[command(about = "快速轻量的生物序列处理工具集", long_about = None)]
#[command(version)]
struct Cli {
    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand, Debug)]
enum Commands {
    /// 常见的序列转换操作:格式转换、反向互补、质量值过滤等
    Seq(commands::seq::SeqArgs),

    /// 对序列进行随机采样
    Sample(commands::sample::SampleArgs),

    /// 提取子序列
    Subseq(commands::subseq::SubseqArgs),

    /// 修剪 FASTQ 序列的低质量碱基
    Trimfq(commands::trimfq::TrimfqArgs),

    /// FASTQ 文件质量检查
    Fqchk(commands::fqchk::FqchkArgs),

    /// 计算序列的碱基组成统计
    Comp(commands::comp::CompArgs),

    /// 合并双端测序的两个FASTQ文件
    Mergepe(commands::mergepe::MergepeArgs),

    /// 从双端数据中删除单端读段
    Dropse(commands::dropse::DropseArgs),

    /// 将输入文件分割成多个文件
    Split(commands::split::SplitArgs),

    /// 重命名序列
    Rename(commands::rename::RenameArgs),

    /// 在FASTA序列中引入突变
    Mutfa(commands::mutfa::MutfaArgs),

    /// 合并两个FASTA文件
    Mergefa(commands::mergefa::MergefaArgs),

    /// 应用掩码到FASTA序列
    Famask(commands::famask::FamaskArgs),

    /// 识别高GC或高AT区域
    Gc(commands::gc::GcArgs),

    /// 计算杂合度
    Hety(commands::hety::HetyArgs),

    /// 切割N区域
    Cutn(commands::cutn::CutnArgs),

    /// 识别gap区域
    Gap(commands::gap::GapArgs),

    /// 同聚物压缩
    Hpc(commands::hpc::HpcArgs),

    /// 识别同聚物运行
    Hrun(commands::hrun::HrunArgs),

    /// 端粒识别
    Telo(commands::telo::TeloArgs),

    /// k-mer频率统计
    Kfreq(commands::kfreq::KfreqArgs),

    /// 列出杂合位点
    Listhet(commands::listhet::ListhetArgs),

    /// 随机选择碱基
    Randbase(commands::randbase::RandbaseArgs),

    /// 统计序列数量和总长度
    Size(commands::size::SizeArgs),
}

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

    match cli.command {
        Commands::Seq(args) => commands::seq::run(&args),
        Commands::Sample(args) => commands::sample::run(&args),
        Commands::Subseq(args) => commands::subseq::run(&args),
        Commands::Trimfq(args) => commands::trimfq::run(&args),
        Commands::Fqchk(args) => commands::fqchk::run(&args),
        Commands::Comp(args) => commands::comp::run(&args),
        Commands::Mergepe(args) => commands::mergepe::run(&args),
        Commands::Dropse(args) => commands::dropse::run(&args),
        Commands::Split(args) => commands::split::run(&args),
        Commands::Rename(args) => commands::rename::run(&args),
        Commands::Mutfa(args) => commands::mutfa::run(&args),
        Commands::Mergefa(args) => commands::mergefa::run(&args),
        Commands::Famask(args) => commands::famask::run(&args),
        Commands::Gc(args) => commands::gc::run(&args),
        Commands::Hety(args) => commands::hety::run(&args),
        Commands::Cutn(args) => commands::cutn::run(&args),
        Commands::Gap(args) => commands::gap::run(&args),
        Commands::Hpc(args) => commands::hpc::run(&args),
        Commands::Hrun(args) => commands::hrun::run(&args),
        Commands::Telo(args) => commands::telo::run(&args),
        Commands::Kfreq(args) => commands::kfreq::run(&args),
        Commands::Listhet(args) => commands::listhet::run(&args),
        Commands::Randbase(args) => commands::randbase::run(&args),
        Commands::Size(args) => commands::size::run(&args),
    }
}