Skip to main content

futucli/cmd/trade_ext/
write_output.rs

1use anyhow::Result;
2use serde::Serialize;
3
4use crate::output::OutputFormat;
5
6#[derive(Serialize)]
7pub(crate) struct TradeWriteSuccess<'a> {
8    pub(crate) operation: &'a str,
9    pub(crate) order_id: u64,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub(crate) returned_order_id: Option<u64>,
12}
13
14pub(crate) fn render_trade_write_success(
15    format: OutputFormat,
16    success: TradeWriteSuccess<'_>,
17) -> Result<String> {
18    match format {
19        OutputFormat::Json => serde_json::to_string_pretty(&success).map_err(Into::into),
20        OutputFormat::Jsonl => serde_json::to_string(&success).map_err(Into::into),
21        OutputFormat::Table => Ok(match success.operation {
22            "place_order" => format!("✅ order placed, order_id={}", success.order_id),
23            "modify_order" => format!(
24                "✅ modify_order ok: order_id={} returned_order_id={}",
25                success.order_id,
26                success.returned_order_id.unwrap_or(success.order_id)
27            ),
28            "cancel_order" => format!("✅ cancel_order ok: order_id={}", success.order_id),
29            "reconfirm_order" => format!("✅ reconfirm_order ok: order_id={}", success.order_id),
30            other => format!("✅ {other} ok: order_id={}", success.order_id),
31        }),
32    }
33}
34
35pub(crate) fn emit_trade_write_success(
36    format: OutputFormat,
37    success: TradeWriteSuccess<'_>,
38) -> Result<()> {
39    println!("{}", render_trade_write_success(format, success)?);
40    Ok(())
41}