pub mod args;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
use clap_verbosity_flag::Verbosity;
pub(crate) use self::args::{
folder_of, path_of, BrokerCmd, ConfigCmd, DaemonCmd, FolderArg, PathArg, SpokeCmd,
};
#[derive(Parser, Debug)]
#[command(name = "imsg", version, about = "iMessage client over Bluetooth MAP/PBAP")]
pub(crate) struct Cli {
#[arg(long, global = true)]
pub(crate) hub: bool,
#[arg(long, global = true, value_name = "ADDR")]
pub(crate) device: Option<String>,
#[arg(long, global = true, value_name = "PATH")]
pub(crate) config: Option<PathBuf>,
#[command(flatten)]
pub(crate) verbosity: Verbosity,
#[command(subcommand)]
pub(crate) command: Command,
}
#[derive(Subcommand, Debug)]
pub(crate) enum Command {
Send {
number: String,
message: String,
},
List {
folder: Option<FolderArg>,
#[arg(long)]
unread: bool,
#[arg(long, short = 'l')]
long: bool,
#[arg(long, value_name = "NUMBER")]
from: Option<String>,
#[arg(long, value_name = "DATE")]
since: Option<String>,
#[arg(long, value_name = "N")]
limit: Option<u16>,
#[arg(long, value_name = "N")]
offset: Option<u16>,
},
Get {
handle: String,
#[arg(long)]
folder: Option<FolderArg>,
#[arg(long)]
mark_read: bool,
},
Delete {
handle: String,
#[arg(long)]
folder: Option<FolderArg>,
#[arg(long)]
undelete: bool,
},
Contacts {
#[arg(long, conflicts_with_all = ["get", "lookup"])]
list: bool,
#[arg(long, value_name = "HANDLE", conflicts_with = "lookup")]
get: Option<String>,
#[arg(long, value_name = "NUMBER")]
lookup: Option<String>,
#[arg(long, value_enum, default_value = "pb")]
path: PathArg,
#[arg(long)]
raw: bool,
#[arg(long, value_name = "N")]
limit: Option<u16>,
#[arg(long, value_name = "N")]
page: Option<u16>,
},
Threads,
Sync {
#[arg(long, value_enum)]
folder: Option<FolderArg>,
},
Unsync {
#[arg(long)]
purge: bool,
},
Folders,
Hub,
Spoke {
#[command(subcommand)]
cmd: SpokeCmd,
},
Config {
#[command(subcommand)]
cmd: ConfigCmd,
},
Broker {
#[command(subcommand)]
cmd: BrokerCmd,
},
#[command(name = "__broker_serve", hide = true)]
BrokerServe,
Daemon {
#[command(subcommand)]
cmd: DaemonCmd,
},
}