Skip to main content

futucli/cli/dispatch/
tier_m.rs

1use anyhow::Result;
2
3use super::super::commands::{
4    AccountFlagArgs, BizGroupArgs, BondAnswerStateArgs, BondPositionListArgs, BondSingleAssetArgs,
5    BondTotalAssetArgs, BondTradeReminderArgs, CashDetailArgs, CashLogArgs, MarginInfoArgs,
6};
7use crate::cmd;
8use crate::output::OutputFormat;
9
10pub(super) async fn dispatch_cash_log(
11    gateway: &str,
12    output: OutputFormat,
13    args: CashLogArgs,
14) -> Result<()> {
15    let CashLogArgs {
16        acc_id_pos,
17        acc_id,
18        card_num,
19        env,
20        begin_time,
21        end_time,
22        log_id_cursor,
23        biz_group_id,
24        biz_sub_group_id,
25        in_out,
26        currency,
27        symbol,
28        stock_id,
29        max_cnt,
30        keyword,
31    } = args;
32    // v1.4.102 A3 alias: positional δΌ˜ε…ˆ, ε¦εˆ™ named.
33    let acc_id = cmd::account::resolve_account_locator(
34        gateway,
35        acc_id_pos.or(acc_id),
36        card_num.as_deref(),
37        "cash-log",
38    )
39    .await?;
40    cmd::tier_m::run_cash_log(cmd::tier_m::CashLogCommand {
41        gateway,
42        env: &env,
43        acc_id,
44        begin_time,
45        end_time,
46        log_id_cursor,
47        biz_group_id,
48        biz_sub_group_id,
49        in_out,
50        keyword,
51        symbol,
52        stock_id,
53        max_cnt,
54        currency,
55        format: output,
56    })
57    .await
58}
59
60pub(super) async fn dispatch_cash_detail(
61    gateway: &str,
62    output: OutputFormat,
63    args: CashDetailArgs,
64) -> Result<()> {
65    let CashDetailArgs {
66        acc_id_pos,
67        acc_id,
68        card_num,
69        env,
70        log_id,
71    } = args;
72    let acc_id = cmd::account::resolve_account_locator(
73        gateway,
74        acc_id_pos.or(acc_id),
75        card_num.as_deref(),
76        "cash-detail",
77    )
78    .await?;
79    cmd::tier_m::run_cash_detail(gateway, &env, acc_id, log_id, output).await
80}
81
82pub(super) async fn dispatch_biz_group(
83    gateway: &str,
84    output: OutputFormat,
85    args: BizGroupArgs,
86) -> Result<()> {
87    let BizGroupArgs {
88        acc_id_pos,
89        acc_id,
90        card_num,
91        env,
92    } = args;
93    let acc_id = cmd::account::resolve_account_locator(
94        gateway,
95        acc_id_pos.or(acc_id),
96        card_num.as_deref(),
97        "biz-group",
98    )
99    .await?;
100    cmd::tier_m::run_biz_group(gateway, &env, acc_id, output).await
101}
102
103pub(super) async fn dispatch_margin_info(
104    gateway: &str,
105    output: OutputFormat,
106    args: MarginInfoArgs,
107) -> Result<()> {
108    let MarginInfoArgs {
109        acc_id_pos,
110        acc_id,
111        card_num,
112        env,
113        market,
114    } = args;
115    let acc_id = cmd::account::resolve_account_locator(
116        gateway,
117        acc_id_pos.or(acc_id),
118        card_num.as_deref(),
119        "margin-info",
120    )
121    .await?;
122    cmd::tier_m::run_margin_info(gateway, &env, acc_id, &market, output).await
123}
124
125pub(super) async fn dispatch_account_flag(
126    gateway: &str,
127    output: OutputFormat,
128    args: AccountFlagArgs,
129) -> Result<()> {
130    let AccountFlagArgs {
131        acc_id,
132        card_num,
133        env,
134        flag_id,
135    } = args;
136    let acc_id =
137        cmd::account::resolve_account_locator(gateway, acc_id, card_num.as_deref(), "account-flag")
138            .await?;
139    cmd::tier_m::run_account_flag(gateway, &env, acc_id, flag_id, output).await
140}
141
142pub(super) async fn dispatch_bond_total_asset(
143    gateway: &str,
144    output: OutputFormat,
145    args: BondTotalAssetArgs,
146) -> Result<()> {
147    let BondTotalAssetArgs {
148        acc_id,
149        card_num,
150        env,
151        market,
152    } = args;
153    let acc_id = cmd::account::resolve_account_locator(
154        gateway,
155        acc_id,
156        card_num.as_deref(),
157        "bond-total-asset",
158    )
159    .await?;
160    cmd::tier_m::run_bond_total_asset(gateway, &env, acc_id, &market, output).await
161}
162
163pub(super) async fn dispatch_bond_single_asset(
164    gateway: &str,
165    output: OutputFormat,
166    args: BondSingleAssetArgs,
167) -> Result<()> {
168    let BondSingleAssetArgs {
169        acc_id,
170        card_num,
171        env,
172        market,
173        symbol,
174    } = args;
175    let acc_id = cmd::account::resolve_account_locator(
176        gateway,
177        acc_id,
178        card_num.as_deref(),
179        "bond-single-asset",
180    )
181    .await?;
182    cmd::tier_m::run_bond_single_asset(gateway, &env, acc_id, &market, &symbol, output).await
183}
184
185pub(super) async fn dispatch_bond_position_list(
186    gateway: &str,
187    output: OutputFormat,
188    args: BondPositionListArgs,
189) -> Result<()> {
190    let BondPositionListArgs {
191        acc_id,
192        card_num,
193        env,
194        market,
195    } = args;
196    let acc_id = cmd::account::resolve_account_locator(
197        gateway,
198        acc_id,
199        card_num.as_deref(),
200        "bond-position-list",
201    )
202    .await?;
203    cmd::tier_m::run_bond_position_list(gateway, &env, acc_id, &market, output).await
204}
205
206pub(super) async fn dispatch_bond_answer_state(
207    gateway: &str,
208    output: OutputFormat,
209    args: BondAnswerStateArgs,
210) -> Result<()> {
211    let BondAnswerStateArgs {
212        acc_id,
213        card_num,
214        env,
215        market,
216        symbol,
217    } = args;
218    let acc_id = cmd::account::resolve_account_locator(
219        gateway,
220        acc_id,
221        card_num.as_deref(),
222        "bond-answer-state",
223    )
224    .await?;
225    cmd::tier_m::run_bond_answer_state(gateway, &env, acc_id, &market, &symbol, output).await
226}
227
228pub(super) async fn dispatch_bond_trade_reminder(
229    gateway: &str,
230    output: OutputFormat,
231    args: BondTradeReminderArgs,
232) -> Result<()> {
233    let BondTradeReminderArgs {
234        acc_id,
235        card_num,
236        env,
237        market,
238        symbol,
239    } = args;
240    let acc_id = cmd::account::resolve_account_locator(
241        gateway,
242        acc_id,
243        card_num.as_deref(),
244        "bond-trade-reminder",
245    )
246    .await?;
247    cmd::tier_m::run_bond_trade_reminder(gateway, &env, acc_id, &market, &symbol, output).await
248}