Skip to main content

futucli/cli/commands/
tier_m.rs

1//! Tier-M / mobile-driven clap argument structs split from commands.rs.
2
3use clap::Args;
4
5#[derive(Args)]
6pub struct CashLogArgs {
7    /// 账户 ID — 位置参数 (优先) 或 --acc-id 二选一
8    #[arg(index = 1, value_name = "ACC_ID")]
9    pub(crate) acc_id_pos: Option<u64>,
10
11    /// 账户 ID (named, 兼容老用法)
12    #[arg(long = "acc-id", conflicts_with = "acc_id_pos")]
13    pub(crate) acc_id: Option<u64>,
14
15    /// App 显示卡号:4 位末尾或 16 位完整卡号
16    #[arg(long = "card-num")]
17    pub(crate) card_num: Option<String>,
18
19    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
20    #[arg(
21        long = "acc-id-file",
22        value_name = "MODE_0600_FILE",
23        conflicts_with_all = ["acc_id_pos", "acc_id", "card_num"]
24    )]
25    pub(crate) acc_id_file: Option<std::path::PathBuf>,
26
27    /// 环境: real / simulate (default real)
28    #[arg(long, default_value = "real")]
29    pub(crate) env: String,
30
31    /// 起始时间戳 (秒, epoch)
32    #[arg(long = "begin-time")]
33    pub(crate) begin_time: u64,
34
35    /// 结束时间戳 (秒, epoch)
36    #[arg(long = "end-time")]
37    pub(crate) end_time: u64,
38
39    /// 分页 cursor (字符串, 从上一页响应的 log_id 字段拿)
40    #[arg(long = "log-id-cursor")]
41    pub(crate) log_id_cursor: Option<String>,
42
43    /// 业务分类 ID 过滤 (从 biz-group 拿可用 id)
44    #[arg(long = "biz-group-id")]
45    pub(crate) biz_group_id: Option<u32>,
46
47    /// 业务子分类 ID 过滤 (从 biz-group 返回的 sub_groups 拿)
48    #[arg(long = "biz-sub-group-id")]
49    pub(crate) biz_sub_group_id: Option<u32>,
50
51    /// 现金流方向: 1=流入, 2=流出, 0/省略=全部
52    #[arg(long = "in-out")]
53    pub(crate) in_out: Option<u32>,
54
55    /// 币种过滤 (如 HKD / USD / JPY;可从 biz-group 的 currencies 拿)
56    #[arg(long)]
57    pub(crate) currency: Option<String>,
58
59    /// 股票代码过滤 (如 AAPL.US / 00700.HK)
60    #[arg(long)]
61    pub(crate) symbol: Option<String>,
62
63    /// backend stock_id 过滤 (有上游 stock_id 时使用)
64    #[arg(long = "stock-id")]
65    pub(crate) stock_id: Option<u64>,
66
67    /// 单页最大条数;省略时 daemon 使用移动端默认 50
68    #[arg(long = "max-cnt")]
69    pub(crate) max_cnt: Option<u32>,
70
71    /// 关键词模糊搜
72    #[arg(long)]
73    pub(crate) keyword: Option<String>,
74}
75
76#[derive(Args)]
77pub struct CashDetailArgs {
78    /// 账户 ID — 位置参数或 --acc-id 二选一
79    #[arg(index = 1, value_name = "ACC_ID")]
80    pub(crate) acc_id_pos: Option<u64>,
81
82    #[arg(long = "acc-id", conflicts_with = "acc_id_pos")]
83    pub(crate) acc_id: Option<u64>,
84
85    /// App 显示卡号:4 位末尾或 16 位完整卡号
86    #[arg(long = "card-num")]
87    pub(crate) card_num: Option<String>,
88
89    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
90    #[arg(
91        long = "acc-id-file",
92        value_name = "MODE_0600_FILE",
93        conflicts_with_all = ["acc_id_pos", "acc_id", "card_num"]
94    )]
95    pub(crate) acc_id_file: Option<std::path::PathBuf>,
96
97    #[arg(long, default_value = "real")]
98    pub(crate) env: String,
99
100    /// log_id (字符串, 从 cash-log 响应的 log_id 字段拿)
101    #[arg(long = "log-id")]
102    pub(crate) log_id: String,
103}
104
105#[derive(Args)]
106pub struct BizGroupArgs {
107    /// 账户 ID — 位置参数或 --acc-id 二选一
108    #[arg(index = 1, value_name = "ACC_ID")]
109    pub(crate) acc_id_pos: Option<u64>,
110
111    #[arg(long = "acc-id", conflicts_with = "acc_id_pos")]
112    pub(crate) acc_id: Option<u64>,
113
114    /// App 显示卡号:4 位末尾或 16 位完整卡号
115    #[arg(long = "card-num")]
116    pub(crate) card_num: Option<String>,
117
118    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
119    #[arg(
120        long = "acc-id-file",
121        value_name = "MODE_0600_FILE",
122        conflicts_with_all = ["acc_id_pos", "acc_id", "card_num"]
123    )]
124    pub(crate) acc_id_file: Option<std::path::PathBuf>,
125
126    #[arg(long, default_value = "real")]
127    pub(crate) env: String,
128}
129
130#[derive(Args)]
131pub struct MarginInfoArgs {
132    /// 账户 ID — 位置参数或 --acc-id 二选一
133    #[arg(index = 1, value_name = "ACC_ID")]
134    pub(crate) acc_id_pos: Option<u64>,
135
136    #[arg(long = "acc-id", conflicts_with = "acc_id_pos")]
137    pub(crate) acc_id: Option<u64>,
138
139    /// App 显示卡号:4 位末尾或 16 位完整卡号
140    #[arg(long = "card-num")]
141    pub(crate) card_num: Option<String>,
142
143    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
144    #[arg(
145        long = "acc-id-file",
146        value_name = "MODE_0600_FILE",
147        conflicts_with_all = ["acc_id_pos", "acc_id", "card_num"]
148    )]
149    pub(crate) acc_id_file: Option<std::path::PathBuf>,
150
151    #[arg(long, default_value = "real")]
152    pub(crate) env: String,
153
154    /// 市场: HK / US / CN_AH (mobile cmd 3101/3102/3107)
155    #[arg(long)]
156    pub(crate) market: String,
157}
158
159#[derive(Args)]
160pub struct AccountFlagArgs {
161    #[arg(long = "acc-id")]
162    pub(crate) acc_id: Option<u64>,
163
164    /// App 显示卡号:4 位末尾或 16 位完整卡号
165    #[arg(long = "card-num")]
166    pub(crate) card_num: Option<String>,
167
168    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
169    #[arg(
170        long = "acc-id-file",
171        value_name = "MODE_0600_FILE",
172        conflicts_with_all = ["acc_id", "card_num"]
173    )]
174    pub(crate) acc_id_file: Option<std::path::PathBuf>,
175
176    #[arg(long, default_value = "real")]
177    pub(crate) env: String,
178
179    /// 标志 id (常用值: 5/22/10/16/23/11/24/25/34/46)
180    #[arg(long = "flag-id")]
181    pub(crate) flag_id: u32,
182}
183
184#[derive(Args)]
185pub struct BondTotalAssetArgs {
186    #[arg(long = "acc-id")]
187    pub(crate) acc_id: Option<u64>,
188
189    /// App 显示卡号:4 位末尾或 16 位完整卡号
190    #[arg(long = "card-num")]
191    pub(crate) card_num: Option<String>,
192
193    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
194    #[arg(
195        long = "acc-id-file",
196        value_name = "MODE_0600_FILE",
197        conflicts_with_all = ["acc_id", "card_num"]
198    )]
199    pub(crate) acc_id_file: Option<std::path::PathBuf>,
200
201    #[arg(long, default_value = "real")]
202    pub(crate) env: String,
203
204    /// 市场: HK / US / SG;兼容别名 USA / SG_UNIVERSAL
205    #[arg(long)]
206    pub(crate) market: String,
207}
208
209#[derive(Args)]
210pub struct BondSingleAssetArgs {
211    #[arg(long = "acc-id")]
212    pub(crate) acc_id: Option<u64>,
213
214    /// App 显示卡号:4 位末尾或 16 位完整卡号
215    #[arg(long = "card-num")]
216    pub(crate) card_num: Option<String>,
217
218    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
219    #[arg(
220        long = "acc-id-file",
221        value_name = "MODE_0600_FILE",
222        conflicts_with_all = ["acc_id", "card_num"]
223    )]
224    pub(crate) acc_id_file: Option<std::path::PathBuf>,
225
226    #[arg(long, default_value = "real")]
227    pub(crate) env: String,
228
229    /// 市场: HK / US / SG;兼容别名 USA / SG_UNIVERSAL
230    #[arg(long)]
231    pub(crate) market: String,
232
233    /// 债券代码
234    #[arg(long)]
235    pub(crate) symbol: String,
236}
237
238#[derive(Args)]
239pub struct BondPositionListArgs {
240    #[arg(long = "acc-id")]
241    pub(crate) acc_id: Option<u64>,
242
243    /// App 显示卡号:4 位末尾或 16 位完整卡号
244    #[arg(long = "card-num")]
245    pub(crate) card_num: Option<String>,
246
247    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
248    #[arg(
249        long = "acc-id-file",
250        value_name = "MODE_0600_FILE",
251        conflicts_with_all = ["acc_id", "card_num"]
252    )]
253    pub(crate) acc_id_file: Option<std::path::PathBuf>,
254
255    #[arg(long, default_value = "real")]
256    pub(crate) env: String,
257
258    /// 市场: HK / US / SG;兼容别名 USA / SG_UNIVERSAL
259    #[arg(long)]
260    pub(crate) market: String,
261}
262
263#[derive(Args)]
264pub struct BondAnswerStateArgs {
265    #[arg(long = "acc-id")]
266    pub(crate) acc_id: Option<u64>,
267
268    /// App 显示卡号:4 位末尾或 16 位完整卡号
269    #[arg(long = "card-num")]
270    pub(crate) card_num: Option<String>,
271
272    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
273    #[arg(
274        long = "acc-id-file",
275        value_name = "MODE_0600_FILE",
276        conflicts_with_all = ["acc_id", "card_num"]
277    )]
278    pub(crate) acc_id_file: Option<std::path::PathBuf>,
279
280    #[arg(long, default_value = "real")]
281    pub(crate) env: String,
282
283    /// 市场: HK / US / SG;兼容别名 USA / SG_UNIVERSAL
284    #[arg(long)]
285    pub(crate) market: String,
286
287    /// 债券 symbol (类似 11000018)
288    #[arg(long)]
289    pub(crate) symbol: String,
290}
291
292#[derive(Args)]
293pub struct BondTradeReminderArgs {
294    #[arg(long = "acc-id")]
295    pub(crate) acc_id: Option<u64>,
296
297    /// App 显示卡号:4 位末尾或 16 位完整卡号
298    #[arg(long = "card-num")]
299    pub(crate) card_num: Option<String>,
300
301    /// Unix owner-only (exact mode 0600) account-id file; keeps the raw selector out of argv.
302    #[arg(
303        long = "acc-id-file",
304        value_name = "MODE_0600_FILE",
305        conflicts_with_all = ["acc_id", "card_num"]
306    )]
307    pub(crate) acc_id_file: Option<std::path::PathBuf>,
308
309    #[arg(long, default_value = "real")]
310    pub(crate) env: String,
311
312    /// 市场: HK / US / SG;兼容别名 USA / SG_UNIVERSAL
313    #[arg(long)]
314    pub(crate) market: String,
315
316    #[arg(long)]
317    pub(crate) symbol: String,
318}