use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(version)]
#[command(propagate_version = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand)]
pub enum Commands {
#[command(name = "encode", about = "Compress plain text data")]
Encode {
#[arg(group = "input", required = false, help = "Input file")]
input_file: Option<PathBuf>,
#[arg(short = 'q', long = "query", help_heading = "Inputs", help = "Query .fastX file")]
query_file: Option<PathBuf>,
#[arg(short = 't', long = "targets", help_heading = "Inputs", help = "File listing target sequence names")]
target_list: Option<PathBuf>,
#[arg(short = 'n', long = "name", help_heading = "Inputs", help = "Sample name (default: .fastX file path)")]
sample_name: Option<String>,
#[arg(short = 'F', long = "format", help_heading = "Inputs", help = "Force input format for plain text parser")]
input_format: Option<ahda::Format>,
#[arg(short = 'c', long = "stdout", default_value_t = false, help = "Write to stdout, keep original file")]
stdout: bool,
#[arg(short = 'f', long = "force", default_value_t = false, help = "Force overwriting")]
force: bool,
#[arg(long = "rename", default_value_t = false, help = "Overwrite query names with `sample_name`.`query_id`")]
rename: bool,
#[arg(short = 'k', long = "keep", default_value_t = false, help = "Don't delete input file after finishing")]
keep: bool,
#[arg(short = 'v', long = "verbose", default_value_t = false, help = "Print extra information")]
verbose: bool,
},
#[command(name = "decode", about = "Decompress binary data")]
Decode {
#[arg(group = "input", required = false, help = "Input file(s)")]
input_file: Option<PathBuf>,
#[arg(short = 'F', long = "format", required = false, help = "Output plain text format")]
format: Option<ahda::Format>,
#[arg(short = 'c', long = "stdout", default_value_t = false, help = "Write to stdout, keep original file")]
stdout: bool,
#[arg(short = 'f', long = "force", default_value_t = false, help = "Force overwriting")]
force: bool,
#[arg(short = 'k', long = "keep", default_value_t = false, help = "Don't delete input file after finishing")]
keep: bool,
#[arg(short = 'v', long = "verbose", default_value_t = false, help = "Print extra information")]
verbose: bool,
},
#[command(name = "convert", about = "Convert between plain text formats")]
Convert {
#[arg(group = "input", required = false, help = "Input file")]
input_file: Option<PathBuf>,
#[arg(short = 'q', long = "query", help_heading = "Inputs", help = "Query .fastX file")]
query_file: Option<PathBuf>,
#[arg(short = 't', long = "targets", help_heading = "Inputs", help = "File listing target sequence names")]
target_list: Option<PathBuf>,
#[arg(short = 'o', long = "output", help_heading = "Outputs", help = "Output to file, keep original file")]
output_file: Option<PathBuf>,
#[arg(short = 'F', long = "format", required = false, help_heading = "Outputs", help = "Output plain text format")]
format: Option<ahda::Format>,
#[arg(short = 'n', long = "name", help_heading = "Inputs", help = "Sample name (default: .fastX file path)")]
sample_name: Option<String>,
#[arg(short = 'c', long = "stdout", default_value_t = false, help = "Write to stdout, keep original file")]
stdout: bool,
#[arg(short = 'f', long = "force", default_value_t = false, help = "Force overwriting")]
force: bool,
#[arg(short = 'k', long = "keep", default_value_t = false, help = "Don't delete input file after finishing")]
keep: bool,
#[arg(short = 'v', long = "verbose", default_value_t = false, help = "Print extra information")]
verbose: bool,
},
#[command(name = "cat", about = "Concatenate binary data")]
Cat {
#[arg(group = "input", required = true, help = "Input file(s)")]
input_files: Vec<PathBuf>,
#[arg(short = 'o', long = "output", help_heading = "Outputs", help = "Output to file")]
output_file: Option<PathBuf>,
#[arg(short = 'c', long = "stdout", default_value_t = false, help = "Write to stdout, keep original file")]
stdout: bool,
#[arg(short = 'f', long = "force", default_value_t = false, help = "Force overwriting")]
force: bool,
#[arg(short = 'v', long = "verbose", default_value_t = false, help = "Print extra information")]
verbose: bool,
},
#[command(name = "set", about = "Set operations on binary data")]
Set {
#[arg(group = "input", required = true, help = "Input file(s)")]
input_files: Vec<PathBuf>,
#[arg(short = 'o', long = "output", help_heading = "Outputs", help = "Output to file")]
output_file: Option<PathBuf>,
#[arg(short = 'm', long = "mode", default_value = "union", help = "Merge operation")]
operation: Option<ahda::MergeOp>,
#[arg(short = 'c', long = "stdout", default_value_t = false, help = "Write to stdout, keep original file")]
stdout: bool,
#[arg(short = 'f', long = "force", default_value_t = false, help = "Force overwriting")]
force: bool,
#[arg(long = "rename", default_value_t = false, help = "Overwrite query names with `sample_name`.`query_id`")]
rename: bool,
#[arg(long = "strip-names", default_value_t = false, help = "Strip query names from block flags.")]
strip_names: bool,
#[arg(short = 'n', long = "name", help = "Overwrite sample name (default: clone from first input)")]
sample_name: Option<String>,
#[arg(short = 'v', long = "verbose", default_value_t = false, help = "Print extra information")]
verbose: bool,
},
}