1pub mod commands;
5mod output;
6
7use clap::{Parser, Subcommand};
8use std::path::PathBuf;
9
10#[derive(Parser)]
13#[command(name = "twin")]
14#[command(about = "Git worktree and symlink environment manager", long_about = None)]
15pub struct Cli {
16 #[command(subcommand)]
17 pub command: Commands,
18}
19
20#[derive(Subcommand)]
22pub enum Commands {
23 Add(AddArgs),
25
26 Create(AddArgs),
28
29 #[command(alias = "ls")]
31 List(ListArgs),
32
33 #[command(alias = "delete")]
35 Remove(RemoveArgs),
36
37 Config(ConfigArgs),
39
40 Tui,
42}
43
44#[derive(Parser)]
46pub struct AddArgs {
47 pub path: PathBuf,
49
50 pub branch: Option<String>,
52
53 #[arg(short = 'b', long)]
55 pub new_branch: Option<String>,
56
57 #[arg(short = 'B', long)]
59 pub force_branch: Option<String>,
60
61 #[arg(short = 'd', long)]
63 pub detach: bool,
64
65 #[arg(long)]
67 pub lock: bool,
68
69 #[arg(long)]
71 pub track: bool,
72
73 #[arg(long)]
75 pub no_track: bool,
76
77 #[arg(long)]
79 pub guess_remote: bool,
80
81 #[arg(long)]
83 pub no_guess_remote: bool,
84
85 #[arg(long)]
87 pub no_checkout: bool,
88
89 #[arg(short = 'q', long)]
91 pub quiet: bool,
92
93 #[arg(short = 'c', long)]
95 pub config: Option<PathBuf>,
96
97 #[arg(long)]
99 pub print_path: bool,
100
101 #[arg(long)]
103 pub cd_command: bool,
104
105 #[arg(long)]
107 pub git_only: bool,
108}
109
110#[derive(Parser)]
112pub struct ListArgs {
113 #[arg(short, long, default_value = "table")]
115 pub format: String,
116}
117
118#[derive(Parser)]
120pub struct RemoveArgs {
121 pub worktree: String,
123
124 #[arg(short, long)]
126 pub force: bool,
127
128 #[arg(short, long, value_name = "FILE")]
130 pub config: Option<PathBuf>,
131
132 #[arg(long)]
134 pub git_only: bool,
135
136 #[arg(short, long)]
138 pub quiet: bool,
139}
140
141#[derive(Parser)]
143pub struct ConfigArgs {
144 pub subcommand: Option<String>,
146
147 #[arg(long)]
149 pub show: bool,
150
151 #[arg(long)]
153 pub set: Option<String>,
154
155 #[arg(long)]
157 pub get: Option<String>,
158}