segul 0.23.2

An ultrafast and memory-efficient tool for phylogenomics
Documentation


use std::path::PathBuf;

use clap::{builder, Args, Subcommand};
use clap::builder::TypedValueParser as _;

use crate::helper::types::{ContigFmt, SeqReadFmt, SummaryMode};

use super::IOArgs;


#[derive(Subcommand)]
pub(crate) enum SeqReadSubcommand {
    #[command(about = "Compute sequence read statistics", name = "summary")]
    RawSummary(SeqReadSummaryArgs),
}

#[derive(Subcommand)]
pub(crate) enum ContigSubcommand {
    #[command(about = "Compute contig statistics", name = "summary")]
    ContigSummary(ContigSummaryArgs),
}

#[derive(Subcommand)]
pub(crate) enum MafSubcommand {
    #[command(about = "Convert genomic files to other formats", name = "maf")]
    Maf(MafConvertArgs),
}


#[derive(Args)]
pub(crate) struct SeqReadSummaryArgs {
    #[command(flatten)]
    pub(crate) io: IOArgs,
    #[arg(
        short = 'f', 
        long ="input-format", 
        help = "Specify input format", 
        default_value_t = SeqReadFmt::Auto,
        value_parser = 
            builder::PossibleValuesParser::new(["auto","fastq","gzip"])
            .map(|x| x.parse::<SeqReadFmt>().expect("Invalid input format")),
    )]
    pub(crate) input_format: SeqReadFmt,
    #[arg(
        long = "mode", 
        help = "Summary mode", 
        default_value_t = SummaryMode::Default,
        value_parser = 
            builder::PossibleValuesParser::new(["minimal", "default", "complete"])
            .map(|x| x.parse::<SummaryMode>().unwrap()))]
    pub(crate) mode: SummaryMode,
    #[arg(short = 'o', long = "output", help = "Output path", default_value = "Read-Summary")]
    pub(crate) output: PathBuf,
    #[arg(long = "prefix", help = "Specify prefix for output files")]
    pub(crate) prefix: Option<String>,
}

#[derive(Args)]
pub(crate) struct ContigSummaryArgs {
    #[command(flatten)]
    pub(crate) io: IOArgs,
    #[arg(
        short = 'f', 
        long ="input-format", 
        help = "Specify input format", 
        default_value_t = ContigFmt::Auto,
        value_parser = 
            builder::PossibleValuesParser::new(["auto","fasta","gzip"])
            .map(|x| x.parse::<ContigFmt>().expect("Invalid input format")),
    )]
    pub(crate) input_format: ContigFmt,
    #[arg(short = 'o', long = "output", help = "Output path", default_value = "Contig-Summary")]
    pub(crate) output: PathBuf,
    #[arg(long = "prefix", help = "Specify prefix for output files")]
    pub(crate) prefix: Option<String>,
}

#[derive(Args)]
pub(crate) struct MafConvertArgs {
    #[command(flatten)]
    pub(crate) io: IOArgs,
    #[arg(long, help = "Path to the source of reference names")]
    pub(crate) reference: PathBuf,
    #[arg(long, help = "Source of names is a bed file")]
    pub(crate) from_bed: bool,
    #[arg(
        short = 't', 
        long = "output-format", 
        help = "Specify output format", 
        default_value = "fasta-int",
        value_parser = 
            builder::PossibleValuesParser::new(["fasta", "phylip","fasta-int", "phylip-int"]),
    )]
    pub(crate) output_fmt: String,
    #[arg(short = 'o', long = "output", help = "Output path", default_value = "Genomic-Convert")]
    pub(crate) output: PathBuf,
    #[arg(long = "prefix", help = "Specify prefix for output files")]
    pub(crate) prefix: Option<String>,
}