use crate::{
handler::{
handle_existing_session_selection, handle_group_session_selection,
handle_make_default_config, handle_make_default_layout_config,
handle_print_bash_completions, handle_print_config_schema, handle_print_fish_completions,
handle_print_layout_config_schema, handle_print_man, handle_print_zsh_completions,
handle_workspace_selection,
},
ui::Tui,
};
use anyhow::Result;
use clap::Parser;
#[derive(Parser, Default, Debug)]
#[clap(author = "Vinny Meller", version)]
pub struct Arguments {
#[clap(short, long)]
pub existing: bool,
#[clap(short, long)]
pub group: bool,
#[clap(short, long)]
#[clap(short = 'G')]
pub group_with: Option<String>,
#[clap(short, long)]
pub dont_attach: bool,
#[clap(short, long)]
pub layout: bool,
#[clap(short, long)]
pub path: Option<String>,
#[clap(short, long)]
pub name: Option<String>,
#[clap(short, long)]
#[clap(short = 'N')]
pub print_workspace_name: bool,
#[clap(short, long)]
pub command: Option<String>,
#[clap(long)]
pub make_default_config: bool,
#[clap(long)]
pub make_default_layout_config: bool,
#[clap(long)]
pub print_config_schema: bool,
#[clap(long)]
pub print_layout_config_schema: bool,
#[clap(long)]
pub print_bash_completion: bool,
#[clap(long)]
pub print_zsh_completion: bool,
#[clap(long)]
pub print_fish_completion: bool,
#[clap(long)]
pub print_man: bool,
#[clap(short, long)]
pub search_paths: Option<Vec<String>>,
#[clap(short, long)]
#[clap(short = 'D')]
pub depth: Option<usize>,
}
pub fn parse() -> Result<()> {
let args = Arguments::parse();
match args {
Arguments {
make_default_config: true,
..
} => handle_make_default_config(&args),
Arguments {
make_default_layout_config: true,
..
} => handle_make_default_layout_config(&args),
Arguments {
print_config_schema: true,
..
} => handle_print_config_schema(),
Arguments {
print_layout_config_schema: true,
..
} => handle_print_layout_config_schema(),
Arguments {
print_bash_completion: true,
..
} => handle_print_bash_completions(),
Arguments {
print_zsh_completion: true,
..
} => handle_print_zsh_completions(),
Arguments {
print_fish_completion: true,
..
} => handle_print_fish_completions(),
Arguments {
print_man: true, ..
} => handle_print_man(),
_ => {
let mut tui = Tui::start()?;
let res = if args.existing {
handle_existing_session_selection(&args, &mut tui)
} else if args.group {
handle_group_session_selection(&args, &mut tui)
} else {
handle_workspace_selection(&args, &mut tui)
};
tui.exit()?;
res
}
}
}