use clap::{ArgGroup, Parser};
use hande_api::{Api, RawArgs};
#[derive(Parser)]
#[command(version, about)]
#[clap(group(ArgGroup::new("info").required(false).args(&["keyglobal", "keycategory", "name", "edit", "summary", "config", "delete", "rename", "list_local", "list_global", "delete_bookmark", "delete_global_bookmark", "import_bookmarks", "export_bookmarks"])))]
pub struct Cli {
pub name: Option<Vec<String>>,
#[arg(short, long, group = "cats")]
pub category: Option<String>,
#[arg(short = '0', long = "summary", default_value_t = false)]
pub summary: bool,
#[arg(short, long = "edit-bookmarks", default_value_t = false)]
pub edit: bool,
#[arg(short = 'E', long = "edit-configuration", default_value_t = false)]
pub config: bool,
#[arg(short = 'K', long = "list-global-keys", default_value_t = false)]
pub keyglobal: bool,
#[arg(short, long = "list-category-keys", default_value_t = false)]
pub keycategory: bool,
#[arg(short = 'L', long = "list", default_value_t = false)]
pub list_local: bool,
#[arg(short = 'G', long = "list-global", default_value_t = false)]
pub list_global: bool,
#[arg(short, long = "new-category", group = "cats", value_name = "CATEGORY")]
pub new: Option<String>,
#[arg(
short,
long = "delete-category",
group = "cats",
value_name = "CATEGORY"
)]
pub delete: Option<String>,
#[arg(
short,
long = "rename-category",
value_delimiter = ' ',
num_args = 2,
group = "cats",
value_names = ["OLD_NAME", "NEW_NAME"]
)]
pub rename: Option<Vec<String>>,
#[arg(long = "delete-bookmark", value_name = "NAME")]
pub delete_bookmark: Option<String>,
#[arg(long = "delete-global-bookmark", value_name = "NAME")]
pub delete_global_bookmark: Option<String>,
#[arg(long = "import-bookmarks", value_name = "PATH")]
pub import_bookmarks: Option<String>,
#[arg(long = "preserve-folders", default_value_t = false)]
pub preserve_folders: bool,
#[arg(long = "export-bookmarks", value_name = "PATH")]
pub export_bookmarks: Option<String>,
}
impl From<Cli> for RawArgs {
fn from(cli: Cli) -> Self {
Self {
name: cli.name,
category: cli.category,
summary: cli.summary,
edit: cli.edit,
config: cli.config,
keyglobal: cli.keyglobal,
keycategory: cli.keycategory,
list_local: cli.list_local,
list_global: cli.list_global,
new: cli.new,
delete: cli.delete,
rename: cli.rename,
delete_bookmark: cli.delete_bookmark,
delete_global_bookmark: cli.delete_global_bookmark,
import_bookmarks: cli.import_bookmarks,
preserve_folders: cli.preserve_folders,
export_bookmarks: cli.export_bookmarks,
}
}
}
pub fn run() {
let cli = Cli::parse();
Api::dispatch(cli.into());
}