Skip to main content

futucli/cli/commands/
qot.rs

1//! Basic QOT clap argument structs split from commands.rs.
2
3use clap::Args;
4
5#[derive(Args)]
6pub struct QuoteArgs {
7    /// 股票代码,MARKET.CODE 格式,如 HK.00700 US.AAPL
8    #[arg(required = true)]
9    pub(crate) symbols: Vec<String>,
10}
11
12#[derive(Args)]
13pub struct SnapshotArgs {
14    /// 股票代码,MARKET.CODE 格式
15    #[arg(required = true)]
16    pub(crate) symbols: Vec<String>,
17}
18
19#[derive(Args)]
20pub struct SubArgs {
21    /// 股票代码,MARKET.CODE 格式
22    #[arg(required = true)]
23    pub(crate) symbols: Vec<String>,
24
25    /// 订阅类型,逗号分隔
26    ///
27    /// 支持: basic, orderbook, ticker, rt, kl_day, kl_1min, kl_3min, kl_5min,
28    ///       kl_15min, kl_30min, kl_60min, kl_week, kl_month, broker, order_detail
29    ///
30    /// v1.4.83 §10 新增 aliases: `--sub-type` / `--sub-types` / `--stype`
31    #[arg(
32        short = 't',
33        long,
34        visible_aliases = ["sub-type", "sub-types", "stype"],
35        default_value = "basic"
36    )]
37    pub(crate) r#type: String,
38}
39
40#[derive(Args)]
41pub struct KlineArgs {
42    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
43    #[arg(index = 1, value_name = "SYMBOL")]
44    pub(crate) symbol_positional: Option<String>,
45
46    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
47    #[arg(
48        long = "symbol",
49        visible_aliases = ["code", "stock"],
50        conflicts_with = "symbol_positional",
51        value_name = "SYMBOL"
52    )]
53    pub(crate) symbol_arg: Option<String>,
54
55    /// K 线类型: day | week | month | 1min | 5min | 15min | 30min | 60min | quarter | year
56    ///
57    /// v1.4.83 §10 新增 aliases: `--ktype` / `--kltype` / `--kl-type`
58    #[arg(
59        short = 't',
60        long,
61        visible_aliases = ["ktype", "kltype", "kl-type"],
62        default_value = "day"
63    )]
64    pub(crate) r#type: String,
65
66    /// 返回根数(默认 100)
67    ///
68    /// v1.4.83 §10 新增 aliases: `--num` / `--max-count` / `--req-count`
69    #[arg(
70        short = 'n',
71        long,
72        visible_aliases = ["num", "max-count", "req-count"]
73    )]
74    pub(crate) count: Option<i32>,
75
76    /// 开始日期 yyyy-MM-dd(默认 end - 回溯)
77    ///
78    /// v1.4.83 §10 alias: `--begin-time` / `--from`
79    #[arg(long, visible_aliases = ["begin-time", "from"])]
80    pub(crate) begin: Option<String>,
81
82    /// 结束日期 yyyy-MM-dd(默认今日)
83    ///
84    /// v1.4.83 §10 alias: `--end-time` / `--to`
85    #[arg(long, visible_aliases = ["end-time", "to"])]
86    pub(crate) end: Option<String>,
87}
88
89#[derive(Args)]
90pub struct OrderbookArgs {
91    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
92    #[arg(index = 1, value_name = "SYMBOL")]
93    pub(crate) symbol_positional: Option<String>,
94
95    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
96    #[arg(
97        long = "symbol",
98        visible_aliases = ["code", "stock"],
99        conflicts_with = "symbol_positional",
100        value_name = "SYMBOL"
101    )]
102    pub(crate) symbol_arg: Option<String>,
103
104    /// 摆盘深度(档数)
105    ///
106    /// v1.4.83 §10 新增 aliases: `--num` / `--count`
107    #[arg(
108        short = 'n',
109        long,
110        visible_aliases = ["num", "count"],
111        default_value_t = 10
112    )]
113    pub(crate) depth: i32,
114}
115
116#[derive(Args)]
117pub struct TickerArgs {
118    /// 股票代码
119    #[arg(index = 1, value_name = "SYMBOL")]
120    pub(crate) symbol_positional: Option<String>,
121
122    /// v1.4.83 §10 alias
123    #[arg(
124        long = "symbol",
125        visible_aliases = ["code", "stock"],
126        conflicts_with = "symbol_positional",
127        value_name = "SYMBOL"
128    )]
129    pub(crate) symbol_arg: Option<String>,
130
131    /// 拉取根数
132    ///
133    /// v1.4.83 §10 aliases: `--num` / `--max-count`
134    #[arg(
135        short = 'n',
136        long,
137        visible_aliases = ["num", "max-count"],
138        default_value_t = 100
139    )]
140    pub(crate) count: i32,
141}
142
143#[derive(Args)]
144pub struct RtArgs {
145    /// 股票代码
146    #[arg(index = 1, value_name = "SYMBOL")]
147    pub(crate) symbol_positional: Option<String>,
148
149    /// v1.4.83 §10 alias
150    #[arg(
151        long = "symbol",
152        visible_aliases = ["code", "stock"],
153        conflicts_with = "symbol_positional",
154        value_name = "SYMBOL"
155    )]
156    pub(crate) symbol_arg: Option<String>,
157}
158
159#[derive(Args)]
160pub struct StaticArgs {
161    /// 股票代码(可多个)
162    #[arg(required = true)]
163    pub(crate) symbols: Vec<String>,
164}
165
166#[derive(Args)]
167pub struct BrokerArgs {
168    /// 股票代码
169    #[arg(index = 1, value_name = "SYMBOL")]
170    pub(crate) symbol_positional: Option<String>,
171
172    /// v1.4.83 §10 alias
173    #[arg(
174        long = "symbol",
175        visible_aliases = ["code", "stock"],
176        conflicts_with = "symbol_positional",
177        value_name = "SYMBOL"
178    )]
179    pub(crate) symbol_arg: Option<String>,
180}
181
182#[derive(Args)]
183pub struct PlateListArgs {
184    /// 市场: HK | US | SH | SZ
185    #[arg(short, long)]
186    pub(crate) market: String,
187
188    /// 板块类型: all | industry | region | concept
189    // v1.4.52 BUG-9: visible_alias = "plate-type" 供 REST/MCP 风格用户
190    #[arg(short = 's', long, visible_alias = "plate-type", default_value = "all")]
191    pub(crate) set: String,
192}
193
194#[derive(Args)]
195pub struct PlateStocksArgs {
196    /// 板块 symbol,MARKET.CODE 格式(位置参数或 --plate 二选一)
197    #[arg(index = 1, value_name = "PLATE")]
198    pub(crate) plate: Option<String>,
199
200    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
201    #[arg(long = "plate", conflicts_with = "plate")]
202    pub(crate) plate_arg: Option<String>,
203}