use clap::Parser;
use quickswitch::{
Result, ShellType, logging::init_logging, qs_init, run_interactive_mode, run_non_interactive,
utils::AppMode,
};
use std::path::PathBuf;
#[derive(Parser)]
#[command(
name = "quickswitch",
version,
about = "A terminal-based tool for quickly switching between directories and files",
long_about = None
)]
struct Cli {
#[arg(long, value_enum, default_value_t = AppMode::Normal)]
mode: AppMode,
#[arg(long)]
non_interactive: bool,
#[arg(long, value_enum)]
init: Option<ShellType>,
#[arg(short = 'v', action = clap::ArgAction::Count)]
verbose: u8,
#[arg(long)]
log_file: Option<PathBuf>,
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
init_logging(cli.verbose, cli.log_file.as_deref())?;
if let Some(shell) = cli.init {
return qs_init(shell);
}
if cli.non_interactive {
return run_non_interactive();
}
run_interactive_mode(cli.mode).await
}