use clap::{ArgAction, Args, Parser, Subcommand};
use std::env;
#[derive(Parser)]
#[command(
name = "kanri",
about = env!("CARGO_PKG_DESCRIPTION"),
version = env!("CARGO_PKG_VERSION"),
subcommand_required = false,
arg_required_else_help = false,
disable_version_flag = true
)]
pub struct Cli {
#[command(subcommand)]
pub cmd: Option<Commands>,
#[arg(short, long, action = ArgAction::SetTrue)]
pub version: bool,
}
#[derive(Subcommand)]
pub enum Commands {
New(NewArgs),
Clone(CloneArgs),
#[command(alias = "o")]
Open(OpenArgs),
#[command(alias = "ls")]
List(ListArgs),
Rename(RenameArgs),
#[command(alias = "rm")]
Remove(RemoveArgs),
Templates {
#[command(subcommand)]
command: TemplatesCommands,
},
Config {
#[command(subcommand)]
command: ConfigCommands,
},
Zen,
}
#[derive(Args)]
pub struct NewArgs {
pub name: Option<String>,
#[arg(short, long)]
pub template: Option<String>,
#[arg(short, long, action = ArgAction::SetTrue)]
pub quiet: bool,
}
#[derive(Args)]
pub struct CloneArgs {
pub remote: Option<String>,
#[arg(short, long)]
pub name: Option<String>,
#[arg(short, long)]
pub branch: Option<String>,
}
#[derive(Args)]
pub struct OpenArgs {
pub name: Option<String>,
#[arg(short, long, action = ArgAction::SetTrue)]
pub shell: bool,
#[arg(short, long, action = ArgAction::SetTrue)]
pub path: bool,
}
#[derive(Args)]
pub struct ListArgs {
#[arg(short, long, action = ArgAction::SetTrue)]
pub pure: bool,
}
#[derive(Args)]
pub struct RenameArgs {
pub old_name: Option<String>,
pub new_name: Option<String>,
}
#[derive(Args)]
pub struct RemoveArgs {
pub name: Option<String>,
#[arg(short, long, action = ArgAction::SetTrue)]
pub force: bool,
}
#[derive(Subcommand)]
pub enum TemplatesCommands {
New,
List(TemplatesListArgs),
Edit,
Clear,
Path,
Info(TemplatesInfoArgs),
Remove(TemplatesRemoveArgs),
}
#[derive(Args)]
pub struct TemplatesListArgs {
#[arg(short, long, action = ArgAction::SetTrue)]
pub pure: bool,
}
#[derive(Args)]
pub struct TemplatesInfoArgs {
pub name: Option<String>,
#[arg(short, long, action = ArgAction::SetTrue)]
pub pure: bool,
}
#[derive(Args)]
pub struct TemplatesRemoveArgs {
pub name: Option<String>,
}
#[derive(Subcommand)]
pub enum ConfigCommands {
Edit,
Path,
Recent(RecentArgs),
Reset,
}
#[derive(Args)]
pub struct RecentArgs {
#[arg(short, long, action = ArgAction::SetTrue)]
pub clear: bool,
}