1 use std::{ffi::OsString, net::SocketAddr};
3 use clap::{crate_version, Parser, Subcommand, ValueEnum};
5 /// JSON-RPC client for signal-cli
6 #[derive(Parser, Debug)]
7 #[command(rename_all = "kebab-case", version = crate_version!())]
9 /// Account to use (for daemon in multi-account mode)
10 #[arg(short = 'a', long)]
11 pub account: Option<String>,
13 /// TCP host and port of signal-cli daemon
14 #[arg(long, conflicts_with = "json_rpc_http")]
15 pub json_rpc_tcp: Option<Option<SocketAddr>>,
17 /// UNIX socket address and port of signal-cli daemon
18 #[arg(long, conflicts_with = "json_rpc_tcp")]
19 pub json_rpc_socket: Option<Option<OsString>>,
21 /// HTTP URL of signal-cli daemon
22 #[arg(long, conflicts_with = "json_rpc_socket")]
23 pub json_rpc_http: Option<Option<String>>,
28 #[command(subcommand)]
29 pub command: CliCommands,
32 #[allow(clippy::large_enum_variant)]
33 #[derive(Subcommand, Debug)]
34 #[command(rename_all = "camelCase", version = crate_version!())]
35 pub enum CliCommands {
44 #[command(rename_all = "kebab-case")]
46 recipient: Vec<String>,
48 #[arg(short = 'g', long)]
49 group_id: Vec<String>,
51 DeleteLocalAccountData {
52 #[arg(long = "ignore-registered")]
53 ignore_registered: Option<bool>,
57 #[arg(short = 'v', long = "verification-code")]
58 verification_code: String,
60 #[arg(short = 'p', long)]
67 recipient: Option<String>,
68 #[arg(short = 'g', long = "group-id")]
69 group_id: Option<String>,
72 recipient: Vec<String>,
79 #[arg(short = 'n', long)]
84 recipient: Vec<String>,
85 #[arg(short = 'a', long = "all-recipients")]
88 blocked: Option<bool>,
94 #[arg(short = 'd', long)]
96 #[arg(short = 'g', long = "group-id")]
97 group_id: Vec<String>,
100 #[arg(short = 'n', long)]
101 number: Option<String>,
105 #[arg(short = 'g', long = "group-id")]
113 #[arg(short = 't', long, default_value_t = 3.0)]
117 #[arg(short = 'v', long)]
120 captcha: Option<String>,
130 #[arg(short = 'd', long = "device-id")]
135 #[arg(short = 't', long = "target-timestamp")]
136 target_timestamp: u64,
138 recipient: Vec<String>,
140 #[arg(short = 'g', long = "group-id")]
141 group_id: Vec<String>,
143 #[arg(long = "note-to-self")]
146 #[command(rename_all = "kebab-case")]
148 recipient: Vec<String>,
150 #[arg(short = 'g', long)]
151 group_id: Vec<String>,
156 #[arg(short = 'e', long)]
159 #[arg(short = 'm', long)]
160 message: Option<String>,
162 #[arg(short = 'a', long)]
163 attachment: Vec<String>,
166 mention: Vec<String>,
169 text_style: Vec<String>,
172 quote_timestamp: Option<u64>,
175 quote_author: Option<String>,
178 quote_message: Option<String>,
181 quote_mention: Vec<String>,
184 quote_text_style: Vec<String>,
187 quote_attachment: Vec<String>,
190 preview_url: Option<String>,
193 preview_title: Option<String>,
196 preview_description: Option<String>,
199 preview_image: Option<String>,
202 sticker: Option<String>,
205 story_timestamp: Option<u64>,
208 story_author: Option<String>,
211 edit_timestamp: Option<u64>,
214 SendPaymentNotification {
224 recipient: Vec<String>,
226 #[arg(short = 'g', long = "group-id")]
227 group_id: Vec<String>,
229 #[arg(long = "note-to-self")]
232 #[arg(short = 'e', long)]
235 #[arg(short = 'a', long = "target-author")]
236 target_author: String,
238 #[arg(short = 't', long = "target-timestamp")]
239 target_timestamp: u64,
241 #[arg(short = 'r', long)]
250 #[arg(short = 't', long = "target-timestamp")]
251 target_timestamp: Vec<u64>,
253 #[arg(value_enum, long)]
258 recipient: Vec<String>,
260 #[arg(short = 'g', long = "group-id")]
261 group_id: Vec<String>,
263 #[arg(short = 's', long)]
271 #[arg(short = 'v', long)]
274 captcha: Option<String>,
276 SubmitRateLimitChallenge {
283 #[arg(short = 'a', long = "trust-all-known-keys")]
284 trust_all_known_keys: bool,
286 #[arg(short = 'v', long = "verified-safety-number")]
287 verified_safety_number: Option<String>,
289 #[command(rename_all = "kebab-case")]
291 recipient: Vec<String>,
293 #[arg(short = 'g', long)]
294 group_id: Vec<String>,
297 #[arg(long = "delete-account")]
298 delete_account: bool,
301 #[arg(short = 'n', long = "device-name")]
302 device_name: Option<String>,
303 #[arg(long = "unrestricted-unidentified-sender")]
304 unrestricted_unidentified_sender: Option<bool>,
306 UpdateConfiguration {
307 #[arg(long = "read-receipts")]
308 read_receipts: Option<bool>,
310 #[arg(long = "unidentified-delivery-indicators")]
311 unidentified_delivery_indicators: Option<bool>,
313 #[arg(long = "typing-indicators")]
314 typing_indicators: Option<bool>,
316 #[arg(long = "link-previews")]
317 link_previews: Option<bool>,
322 #[arg(short = 'e', long)]
323 expiration: Option<u32>,
325 #[arg(short = 'n', long)]
326 name: Option<String>,
329 #[arg(short = 'g', long = "group-id")]
330 group_id: Option<String>,
332 #[arg(short = 'n', long)]
333 name: Option<String>,
335 #[arg(short = 'd', long)]
336 description: Option<String>,
338 #[arg(short = 'a', long)]
339 avatar: Option<String>,
341 #[arg(short = 'm', long)]
344 #[arg(short = 'r', long = "remove-member")]
345 remove_member: Vec<String>,
350 #[arg(long = "remove-admin")]
351 remove_admin: Vec<String>,
359 #[arg(long = "reset-link")]
362 #[arg(value_enum, long)]
363 link: Option<LinkState>,
365 #[arg(value_enum, long = "set-permission-add-member")]
366 set_permission_add_member: Option<GroupPermission>,
368 #[arg(value_enum, long = "set-permission-edit-details")]
369 set_permission_edit_details: Option<GroupPermission>,
371 #[arg(value_enum, long = "set-permission-send-messages")]
372 set_permission_send_messages: Option<GroupPermission>,
374 #[arg(short = 'e', long)]
375 expiration: Option<u32>,
378 #[arg(long = "given-name")]
379 given_name: Option<String>,
381 #[arg(long = "family-name")]
382 family_name: Option<String>,
385 about: Option<String>,
387 #[arg(long = "about-emoji")]
388 about_emoji: Option<String>,
390 #[arg(long = "mobile-coin-address")]
391 mobile_coin_address: Option<String>,
394 avatar: Option<String>,
396 #[arg(long = "remove-avatar")]
403 verification_code: String,
405 #[arg(short = 'p', long)]
411 #[derive(ValueEnum, Clone, Debug)]
412 #[value(rename_all = "kebab-case")]
413 pub enum ReceiptType {
418 #[derive(ValueEnum, Clone, Debug)]
419 #[value(rename_all = "kebab-case")]
426 #[derive(ValueEnum, Clone, Debug)]
427 #[value(rename_all = "kebab-case")]
428 pub enum GroupPermission {