use clap::{Parser, Subcommand};
mod choose;
mod confirm;
mod file;
mod filter;
mod input;
mod keybinds;
mod log;
mod menu;
mod spin;
mod style;
mod update;
const PANDORA_GUIDE: &str = include_str!("../PANDORA_GUIDE.md");
pub const BIN_NAME: &str = "pan";
#[derive(Parser)]
#[command(name = crate::BIN_NAME, about = "CLI toolkit with interactive TUI popups", version = env!("CARGO_PKG_VERSION"))]
struct Cli {
#[arg(long)]
guide: bool,
#[command(subcommand)]
command: Option<Commands>,
}
#[derive(Subcommand)]
enum Commands {
Confirm(confirm::ConfirmArgs),
Choose(choose::ChooseArgs),
Filter(filter::FilterArgs),
Spin(spin::SpinArgs),
Log(log::LogArgs),
File(file::FileArgs),
Input(input::InputArgs),
Menu(menu::MenuArgs),
Update(update::UpdateArgs),
}
fn main() {
let cli = Cli::parse();
if cli.guide {
println!("{}", PANDORA_GUIDE);
return;
}
match cli.command {
Some(Commands::Confirm(args)) => confirm::run(args),
Some(Commands::Choose(args)) => choose::run(args),
Some(Commands::Filter(args)) => filter::run(args),
Some(Commands::Spin(args)) => spin::run(args),
Some(Commands::Log(args)) => log::run(args),
Some(Commands::File(args)) => file::run(args),
Some(Commands::Input(args)) => input::run(args),
Some(Commands::Menu(args)) => menu::run(args),
Some(Commands::Update(args)) => update::run(args),
None => {
let mut cmd = <Cli as clap::CommandFactory>::command();
cmd.print_help().unwrap();
println!();
}
}
}