use clap::{Parser, Subcommand};
use std::path::PathBuf;
const EXTRA_HELP: &str = "frostx.toml(5), frostx-actions(5), frostx-includes(5), frostx-state(5)";
#[allow(clippy::struct_excessive_bools)]
#[derive(Parser, Debug)]
#[command(name = "frostx", version, about, long_about = None, after_help = EXTRA_HELP)]
pub struct Cli {
#[arg(long, global = true)]
pub json: bool,
#[arg(short = 'n', long, global = true)]
pub dry_run: bool,
#[arg(short, long, global = true, action = clap::ArgAction::Count)]
pub verbose: u8,
#[arg(short, long, global = true)]
pub quiet: bool,
#[arg(short, long, global = true)]
pub yes: bool,
#[arg(long, global = true, value_name = "FILE")]
pub config: Option<PathBuf>,
#[arg(long, global = true, value_name = "DIR")]
pub library: Option<PathBuf>,
#[arg(long, global = true, value_name = "DIR")]
pub state_dir: Option<PathBuf>,
#[arg(long, global = true, value_name = "DURATION")]
pub pretend_inactive: Option<String>,
#[command(subcommand)]
pub command: Cmd,
}
#[derive(Subcommand, Debug)]
pub enum Cmd {
Init {
#[arg(default_value = ".")]
path: PathBuf,
#[arg(long, value_name = "NAME")]
include: Vec<String>,
#[arg(long)]
force: bool,
},
Check {
#[arg(default_value = ".")]
path: PathBuf,
},
Run {
#[arg(default_value = ".")]
path: PathBuf,
#[arg(long, value_name = "N")]
rule: Option<usize>,
#[arg(long, value_name = "NAME")]
action: Option<String>,
#[arg(long)]
force: bool,
},
Scan {
#[arg(default_value = ".")]
root: PathBuf,
#[arg(long)]
triggered_only: bool,
#[arg(long, value_name = "N")]
depth: Option<usize>,
},
Doctor {
#[arg(default_value = ".")]
path: PathBuf,
},
Gc,
Projects {
#[command(subcommand)]
subcmd: ProjectsCmd,
},
}
#[derive(Subcommand, Debug)]
pub enum ProjectsCmd {
List,
Add {
#[arg(value_name = "PATH")]
paths: Vec<PathBuf>,
#[arg(long, value_name = "DIR")]
scan: Option<PathBuf>,
},
Rm {
path: PathBuf,
},
Check {
#[arg(long)]
daily: bool,
},
Run {
#[arg(long)]
force: bool,
#[arg(long, value_name = "N")]
rule: Option<usize>,
#[arg(long, value_name = "NAME")]
action: Option<String>,
#[arg(long)]
daily: bool,
},
}