futucli/cmd/trade_ext/
write_output.rs1use 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}