1 use clap::{crate_version, Parser, Subcommand, ValueEnum};
2 use std::{ffi::OsString, net::SocketAddr};
4 /// JSON-RPC client for signal-cli
5 #[derive(Parser, Debug)]
6 #[command(rename_all = "kebab-case", version=crate_version!())]
8 /// Account to use (for daemon in multi-account mode)
9 #[arg(short = 'a', long)]
10 pub account: Option<String>,
12 /// TCP host and port of signal-cli daemon
14 pub json_rpc_tcp: Option<Option<SocketAddr>>,
16 /// UNIX socket address and port of signal-cli daemon
18 pub json_rpc_socket: Option<Option<OsString>>,
20 #[arg(value_enum, long, default_value_t = OutputTypes::Json)]
21 pub output: OutputTypes,
26 #[command(subcommand)]
27 pub command: CliCommands,
30 #[derive(ValueEnum, Clone, Debug)]
31 #[value(rename_all = "kebab-case")]
32 pub enum OutputTypes {
37 #[allow(clippy::large_enum_variant)]
38 #[derive(Subcommand, Debug)]
39 #[command(rename_all = "camelCase", version=crate_version!())]
40 pub enum CliCommands {
45 #[command(rename_all = "kebab-case")]
47 recipient: Vec<String>,
49 #[arg(short = 'g', long)]
50 group_id: Vec<String>,
52 DeleteLocalAccountData {
53 #[arg(long = "ignore-registered")]
54 ignore_registered: Option<bool>,
57 recipient: Vec<String>,
64 #[arg(short = 'n', long)]
69 recipient: Vec<String>,
70 #[arg(short = 'a', long = "all-recipients")]
73 blocked: Option<bool>,
79 #[arg(short = 'd', long)]
81 #[arg(short = 'g', long = "group-id")]
82 group_id: Vec<String>,
85 #[arg(short = 'n', long)]
86 number: Option<String>,
90 #[arg(short = 'g', long = "group-id")]
98 #[arg(short = 't', long, default_value_t = 3.0)]
102 #[arg(short = 'v', long)]
105 captcha: Option<String>,
113 #[arg(short = 'd', long = "device-id")]
118 #[arg(short = 't', long = "target-timestamp")]
119 target_timestamp: u64,
121 recipient: Vec<String>,
123 #[arg(short = 'g', long = "group-id")]
124 group_id: Vec<String>,
126 #[arg(long = "note-to-self")]
129 #[command(rename_all = "kebab-case")]
131 recipient: Vec<String>,
133 #[arg(short = 'g', long)]
134 group_id: Vec<String>,
139 #[arg(short = 'e', long)]
142 #[arg(short = 'm', long)]
143 message: Option<String>,
145 #[arg(short = 'a', long)]
146 attachment: Vec<String>,
149 mention: Vec<String>,
152 quote_timestamp: Option<u64>,
155 quote_author: Option<String>,
158 quote_message: Option<String>,
161 quote_mention: Vec<String>,
164 sticker: Option<String>,
167 SendPaymentNotification {
177 recipient: Vec<String>,
179 #[arg(short = 'g', long = "group-id")]
180 group_id: Vec<String>,
182 #[arg(long = "note-to-self")]
185 #[arg(short = 'e', long)]
188 #[arg(short = 'a', long = "target-author")]
189 target_author: String,
191 #[arg(short = 't', long = "target-timestamp")]
192 target_timestamp: u64,
194 #[arg(short = 'r', long)]
200 #[arg(short = 't', long = "target-timestamp")]
201 target_timestamp: Vec<u64>,
203 #[arg(value_enum, long)]
208 recipient: Vec<String>,
210 #[arg(short = 'g', long = "group-id")]
211 group_id: Vec<String>,
213 #[arg(short = 's', long)]
219 SubmitRateLimitChallenge {
226 #[arg(short = 'a', long = "trust-all-known-keys")]
227 trust_all_known_keys: bool,
229 #[arg(short = 'v', long = "verified-safety-number")]
230 verified_safety_number: Option<String>,
232 #[command(rename_all = "kebab-case")]
234 recipient: Vec<String>,
236 #[arg(short = 'g', long)]
237 group_id: Vec<String>,
240 #[arg(long = "delete-account")]
241 delete_account: bool,
244 #[arg(short = 'n', long = "device-name")]
245 device_name: Option<String>,
247 UpdateConfiguration {
248 #[arg(long = "read-receipts")]
249 read_receipts: Option<bool>,
251 #[arg(long = "unidentified-delivery-indicators")]
252 unidentified_delivery_indicators: Option<bool>,
254 #[arg(long = "typing-indicators")]
255 typing_indicators: Option<bool>,
257 #[arg(long = "link-previews")]
258 link_previews: Option<bool>,
263 #[arg(short = 'e', long)]
264 expiration: Option<u32>,
266 #[arg(short = 'n', long)]
267 name: Option<String>,
270 #[arg(short = 'g', long = "group-id")]
271 group_id: Option<String>,
273 #[arg(short = 'n', long)]
274 name: Option<String>,
276 #[arg(short = 'd', long)]
277 description: Option<String>,
279 #[arg(short = 'a', long)]
280 avatar: Option<String>,
282 #[arg(short = 'm', long)]
285 #[arg(short = 'r', long = "remove-member")]
286 remove_member: Vec<String>,
291 #[arg(long = "remove-admin")]
292 remove_admin: Vec<String>,
300 #[arg(long = "reset-link")]
303 #[arg(value_enum, long)]
304 link: Option<LinkState>,
306 #[arg(value_enum, long = "set-permission-add-member")]
307 set_permission_add_member: Option<GroupPermission>,
309 #[arg(value_enum, long = "set-permission-edit-details")]
310 set_permission_edit_details: Option<GroupPermission>,
312 #[arg(value_enum, long = "set-permission-send-messages")]
313 set_permission_send_messages: Option<GroupPermission>,
315 #[arg(short = 'e', long)]
316 expiration: Option<u32>,
319 #[arg(long = "given-name")]
320 given_name: Option<String>,
322 #[arg(long = "family-name")]
323 family_name: Option<String>,
326 about: Option<String>,
328 #[arg(long = "about-emoji")]
329 about_emoji: Option<String>,
331 #[arg(long = "mobile-coin-address")]
332 mobile_coin_address: Option<String>,
335 avatar: Option<String>,
337 #[arg(long = "remove-avatar")]
344 verification_code: String,
346 #[arg(short = 'p', long)]
352 #[derive(ValueEnum, Clone, Debug)]
353 #[value(rename_all = "kebab-case")]
354 pub enum ReceiptType {
359 #[derive(ValueEnum, Clone, Debug)]
360 #[value(rename_all = "kebab-case")]
367 #[derive(ValueEnum, Clone, Debug)]
368 #[value(rename_all = "kebab-case")]
369 pub enum GroupPermission {