heddle_cli_args/cli/cli_args/
commands_discuss.rs1use clap::{ArgGroup, Args, Subcommand};
5
6#[derive(Clone, Debug, Subcommand)]
7pub enum DiscussCommands {
8 Open(DiscussOpenArgs),
10 Append(DiscussAppendArgs),
12 Resolve(DiscussResolveArgs),
14 Reopen(DiscussReopenArgs),
16 List(DiscussListArgs),
18 Show(DiscussShowArgs),
20 Wait(DiscussWaitArgs),
22}
23
24#[derive(Clone, Debug, Args)]
25#[command(
26 group(
27 ArgGroup::new("positional_open")
28 .args(["file", "symbol", "body"])
29 .multiple(true)
30 .conflicts_with("named_open")
31 ),
32 group(
33 ArgGroup::new("named_open")
34 .args(["file_flag", "symbol_flag", "body_flag"])
35 .multiple(true)
36 )
37)]
38pub struct DiscussOpenArgs {
39 #[arg(
41 value_name = "FILE",
42 required_unless_present_all = ["file_flag", "symbol_flag", "body_flag"]
43 )]
44 pub file: Option<String>,
45 #[arg(
47 value_name = "SYMBOL",
48 required_unless_present_all = ["file_flag", "symbol_flag", "body_flag"]
49 )]
50 pub symbol: Option<String>,
51 #[arg(
53 value_name = "BODY",
54 required_unless_present_all = ["file_flag", "symbol_flag", "body_flag"]
55 )]
56 pub body: Option<String>,
57 #[arg(
59 long = "file",
60 value_name = "FILE",
61 required_unless_present_all = ["file", "symbol", "body"]
62 )]
63 pub file_flag: Option<String>,
64 #[arg(
66 long = "symbol",
67 value_name = "SYMBOL",
68 required_unless_present_all = ["file", "symbol", "body"]
69 )]
70 pub symbol_flag: Option<String>,
71 #[arg(
73 long = "body",
74 value_name = "BODY",
75 required_unless_present_all = ["file", "symbol", "body"]
76 )]
77 pub body_flag: Option<String>,
78 #[arg(long)]
80 pub title: Option<String>,
81 #[arg(long)]
83 pub state: Option<String>,
84 #[arg(long)]
86 pub visibility: Option<String>,
87 #[arg(long, value_name = "REF")]
89 pub thread: Option<String>,
90}
91
92#[derive(Clone, Debug, Args)]
93pub struct DiscussAppendArgs {
94 pub discussion_id: String,
95 pub body: String,
96}
97
98#[derive(Clone, Debug, Args)]
99#[command(group(
100 ArgGroup::new("resolution")
101 .required(true)
102 .args(["mode", "into_annotation"])
103))]
104pub struct DiscussResolveArgs {
105 pub discussion_id: String,
106 #[arg(long, value_enum)]
108 pub mode: Option<ResolveModeArg>,
109 #[arg(long, requires = "body")]
111 pub into_annotation: bool,
112 #[arg(long, requires = "mode")]
114 pub state: Option<String>,
115 #[arg(long, requires = "mode")]
117 pub reason: Option<String>,
118 #[arg(long, requires = "into_annotation")]
120 pub body: Option<String>,
121 #[arg(
123 long,
124 value_parser = ["constraint", "invariant", "rationale"],
125 requires = "into_annotation"
126 )]
127 pub kind: Option<String>,
128 #[arg(long, requires = "into_annotation")]
130 pub tag: Vec<String>,
131}
132
133#[derive(Clone, Debug, clap::ValueEnum)]
134pub enum ResolveModeArg {
135 ByEdit,
136 Dismiss,
137}
138
139#[derive(Clone, Debug, Args)]
140pub struct DiscussReopenArgs {
141 pub discussion_id: String,
142 #[arg(long)]
144 pub reason: String,
145}
146
147#[derive(Clone, Debug, Args)]
148pub struct DiscussListArgs {
149 #[arg(long)]
151 pub state: Option<String>,
152 #[arg(long)]
154 pub file: Option<String>,
155 #[arg(long)]
157 pub symbol: Option<String>,
158 #[arg(long, default_value = "open")]
160 pub status: String,
161}
162
163#[derive(Clone, Debug, Args)]
164pub struct DiscussShowArgs {
165 pub discussion_id: String,
166}
167
168#[derive(Clone, Debug, Args)]
169pub struct DiscussWaitArgs {
170 #[arg(long)]
172 pub after: Option<i64>,
173 #[arg(long)]
175 pub remote: Option<String>,
176 #[arg(long)]
178 pub thread: Option<String>,
179 #[arg(long, hide = true)]
181 pub max_events: Option<usize>,
182}