use std::{ffi::OsString, path::PathBuf};
use clap::{Args, Parser, Subcommand, command};
use crate::launch::ContainerStrategy;
#[derive(Parser, Debug)]
#[command(
name = "vscli",
about = "A CLI tool to launch vscode projects, which supports dev containers.",
author,
version,
about
)]
pub(crate) struct Opts {
#[arg(short = 's', long, env, global = true)]
pub history_path: Option<PathBuf>,
#[arg(short, long, alias = "dry", env, global = true)]
pub dry_run: bool,
#[command(flatten)]
pub verbose: clap_verbosity_flag::Verbosity<clap_verbosity_flag::InfoLevel>,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Args, Debug, Clone)]
pub(crate) struct LaunchArgs {
#[arg(short, long, env)]
pub command: Option<String>,
#[arg(short, long, ignore_case = true)]
pub behavior: Option<ContainerStrategy>,
#[arg(long, env)]
pub config: Option<PathBuf>,
#[arg(value_parser, env)]
pub args: Vec<OsString>,
}
#[derive(Subcommand, Debug)]
pub(crate) enum Commands {
#[clap(alias = "o")]
Open {
#[arg(value_parser, default_value = ".")]
path: PathBuf,
#[command(flatten)]
launch: LaunchArgs,
},
#[clap(alias = "ui")]
Recent {
#[arg(long)]
hide_instructions: bool,
#[arg(long)]
hide_info: bool,
#[command(flatten)]
launch: LaunchArgs,
},
}