1 use clap::{crate_version, ArgEnum, Parser, Subcommand};
2 use std::{ffi::OsString, net::SocketAddr};
4 /// JSON-RPC client for signal-cli
5 #[derive(Parser, Debug)]
6 #[clap(rename_all = "kebab-case", version=crate_version!())]
8 /// Account to use (for daemon in multi-account mode)
9 #[clap(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 #[clap(arg_enum, long, default_value_t = OutputTypes::Json)]
21 pub output: OutputTypes,
27 pub command: CliCommands,
30 #[derive(ArgEnum, Clone, Debug)]
31 #[clap(rename_all = "kebab-case")]
32 pub enum OutputTypes {
37 #[allow(clippy::large_enum_variant)]
38 #[derive(Subcommand, Debug)]
39 #[clap(rename_all = "camelCase", version=crate_version!())]
40 pub enum CliCommands {
45 #[clap(rename_all = "kebab-case")]
47 recipient: Vec<String>,
49 #[clap(short = 'g', long)]
50 group_id: Vec<String>,
53 recipient: Vec<String>,
60 #[clap(short = 'n', long)]
67 #[clap(short = 'd', long)]
71 #[clap(short = 'n', long)]
72 number: Option<String>,
76 #[clap(short = 'g', long = "group-id")]
84 #[clap(short = 't', long, default_value_t = 3.0)]
88 #[clap(short = 'v', long)]
91 captcha: Option<String>,
99 #[clap(short = 'd', long = "device-id")]
104 #[clap(short = 't', long = "target-timestamp")]
105 target_timestamp: u64,
107 recipient: Vec<String>,
109 #[clap(short = 'g', long = "group-id")]
110 group_id: Vec<String>,
112 #[clap(long = "note-to-self")]
115 #[clap(rename_all = "kebab-case")]
117 recipient: Vec<String>,
119 #[clap(short = 'g', long)]
120 group_id: Vec<String>,
125 #[clap(short = 'e', long)]
128 #[clap(short = 'm', long)]
129 message: Option<String>,
131 #[clap(short = 'a', long)]
132 attachment: Vec<String>,
135 mention: Vec<String>,
138 quote_timestamp: Option<u64>,
141 quote_author: Option<String>,
144 quote_message: Option<String>,
147 quote_mention: Vec<String>,
150 sticker: Option<String>,
154 recipient: Vec<String>,
156 #[clap(short = 'g', long = "group-id")]
157 group_id: Vec<String>,
159 #[clap(long = "note-to-self")]
162 #[clap(short = 'e', long)]
165 #[clap(short = 'a', long = "target-author")]
166 target_author: String,
168 #[clap(short = 't', long = "target-timestamp")]
169 target_timestamp: u64,
171 #[clap(short = 'r', long)]
177 #[clap(short = 't', long = "target-timestamp")]
178 target_timestamp: Vec<u64>,
180 #[clap(arg_enum, long)]
185 recipient: Vec<String>,
187 #[clap(short = 'g', long = "group-id")]
188 group_id: Vec<String>,
190 #[clap(short = 's', long)]
196 SubmitRateLimitChallenge {
203 #[clap(short = 'a', long = "trust-all-known-keys")]
204 trust_all_known_keys: bool,
206 #[clap(short = 'v', long = "verified-safety-number")]
207 verified_safety_number: Option<String>,
209 #[clap(rename_all = "kebab-case")]
211 recipient: Vec<String>,
213 #[clap(short = 'g', long)]
214 group_id: Vec<String>,
217 #[clap(long = "delete-account")]
218 delete_account: bool,
221 #[clap(short = 'n', long = "device-name")]
222 device_name: Option<String>,
224 UpdateConfiguration {
225 #[clap(long = "read-receipts", parse(try_from_str))]
226 read_receipts: Option<bool>,
228 #[clap(long = "unidentified-delivery-indicators")]
229 unidentified_delivery_indicators: Option<bool>,
231 #[clap(long = "typing-indicators")]
232 typing_indicators: Option<bool>,
234 #[clap(long = "link-previews")]
235 link_previews: Option<bool>,
240 #[clap(short = 'e', long)]
241 expiration: Option<u32>,
243 #[clap(short = 'n', long)]
244 name: Option<String>,
247 #[clap(short = 'g', long = "group-id")]
248 group_id: Option<String>,
250 #[clap(short = 'n', long)]
251 name: Option<String>,
253 #[clap(short = 'd', long)]
254 description: Option<String>,
256 #[clap(short = 'a', long)]
257 avatar: Option<String>,
259 #[clap(short = 'm', long)]
262 #[clap(short = 'r', long = "remove-member")]
263 remove_member: Vec<String>,
268 #[clap(long = "remove-admin")]
269 remove_admin: Vec<String>,
271 #[clap(long = "reset-link")]
274 #[clap(arg_enum, long)]
275 link: Option<LinkState>,
277 #[clap(arg_enum, long = "set-permission-add-member")]
278 set_permission_add_member: Option<GroupPermission>,
280 #[clap(arg_enum, long = "set-permission-edit-details")]
281 set_permission_edit_details: Option<GroupPermission>,
283 #[clap(arg_enum, long = "set-permission-send-messages")]
284 set_permission_send_messages: Option<GroupPermission>,
286 #[clap(short = 'e', long)]
287 expiration: Option<u32>,
290 #[clap(long = "given-name")]
291 given_name: Option<String>,
293 #[clap(long = "family-name")]
294 family_name: Option<String>,
297 about: Option<String>,
299 #[clap(long = "about-emoji")]
300 about_emoji: Option<String>,
303 avatar: Option<String>,
305 #[clap(long = "remove-avatar")]
312 verification_code: String,
314 #[clap(short = 'p', long)]
320 #[derive(ArgEnum, Clone, Debug)]
321 #[clap(rename_all = "kebab-case")]
322 pub enum ReceiptType {
327 #[derive(ArgEnum, Clone, Debug)]
328 #[clap(rename_all = "kebab-case")]
335 #[derive(ArgEnum, Clone, Debug)]
336 #[clap(rename_all = "kebab-case")]
337 pub enum GroupPermission {