use crate::tool::command::{SyncIgnoreArgs as ToolSyncIgnoreArgs, SyncIgnoreTarget};
use crate::x::cursor::prompts::CursorPromptsArgs;
use anyhow::Result;
use clap::{Args, Subcommand};
use std::path::PathBuf;
#[derive(Args)]
#[command(
author,
version,
about,
long_about = "Commands for interacting with Cursor"
)]
pub struct CursorArgs {
#[command(subcommand)]
pub command: CursorCommands,
}
#[derive(Subcommand)]
pub enum CursorCommands {
Prompts(CursorPromptsArgs),
#[command(name = "sync-ignore", alias = "si")]
SyncIgnore(CursorSyncIgnoreArgs),
}
#[derive(Args, Debug, Clone)]
pub struct CursorSyncIgnoreArgs {
#[arg(short = 'y', long, action = clap::ArgAction::SetTrue)]
pub yes: bool,
#[arg(long, action = clap::ArgAction::SetTrue)]
pub interactive: bool,
#[arg(long, action = clap::ArgAction::SetTrue)]
pub force: bool,
#[arg(long, short = 'v', action = clap::ArgAction::SetTrue)]
pub verbose: bool,
#[arg(
long,
short = 't',
value_enum,
value_delimiter = ',',
default_value = "cursor"
)]
pub target: Vec<SyncIgnoreTarget>,
#[arg(long, short = 'i')]
pub input: Vec<PathBuf>,
}
pub fn run(args: &CursorArgs) -> Result<()> {
match &args.command {
CursorCommands::Prompts(prompts) => crate::x::cursor::prompts::run(prompts),
CursorCommands::SyncIgnore(sync_args) => {
crate::tool::sync_ignore::run(&ToolSyncIgnoreArgs {
yes: sync_args.yes,
interactive: sync_args.interactive,
force: sync_args.force,
verbose: sync_args.verbose,
target: sync_args.target.clone(),
input: sync_args.input.clone(),
})
}
}
}