use clap::{AppSettings, Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Clone, Debug, Eq, Parser, PartialEq)]
#[clap(author, version, about)]
#[clap(global_setting(AppSettings::PropagateVersion))]
#[clap(global_setting(AppSettings::InferLongArgs))]
#[clap(global_setting(AppSettings::InferSubcommands))]
#[clap(global_setting(AppSettings::ArgsNegateSubcommands))]
#[clap(global_setting(AppSettings::UseLongFormatForHelpSubcommand))]
pub struct Arguments {
#[clap(subcommand)]
pub command: Option<Commands>,
#[clap(flatten)]
pub extract: ExtractCommand,
#[clap(flatten)]
pub verbosity: Verbosity,
}
impl Arguments {
pub fn parse_from_args() -> Self {
Arguments::parse()
}
}
#[derive(Args, Copy, Clone, Debug, Eq, PartialEq)]
pub struct Verbosity {
#[clap(
short,
long,
global(true),
help_heading("VERBOSITY"),
conflicts_with_all(&["debug", "trace"]),
parse(from_occurrences)
)]
pub verbose: usize,
#[clap(short, long, global(true), help_heading("VERBOSITY"), conflicts_with_all(&["verbose", "trace"]))]
pub debug: bool,
#[clap(short, long, global(true), help_heading("VERBOSITY"), conflicts_with_all(&["verbose", "debug"]))]
pub trace: bool,
}
#[derive(Args, Clone, Debug, Eq, PartialEq)]
pub struct LanguageArguments {
#[clap(short, long, help_heading("LANGUAGE"))]
pub language: Option<String>,
#[clap(short, long, help_heading("LANGUAGE"), requires("language"))]
pub required: bool,
}
#[derive(Args, Clone, Debug, Eq, PartialEq)]
pub struct ExtractCommand {
#[clap(short, long, help_heading("IO"))]
pub input: Option<PathBuf>,
#[clap(short, long, help_heading("IO"))]
pub output: Option<PathBuf>,
#[clap(short, long, help_heading("IO"), requires("output"))]
pub force: bool,
#[clap(flatten)]
pub matcher: LanguageArguments,
}
#[derive(Clone, Debug, Eq, Parser, PartialEq)]
pub struct WalkCommand {
#[clap(short, long, default_value = ".", help_heading("WALK"))]
pub input: PathBuf,
#[clap(short, long, help_heading("WALK"))]
pub output: PathBuf,
#[clap(short, long, help_heading("WALK"))]
pub force: bool,
#[clap(short, long, help_heading("WALK"))]
pub extension: String,
#[clap(flatten)]
pub matcher: LanguageArguments,
}
#[derive(Clone, Debug, Eq, PartialEq, Subcommand)]
pub enum Commands {
Walk(WalkCommand),
}