use std::fmt;
use crate::commands::trading::arborter_pb::{Order, SendOrderResponse};
impl fmt::Display for Order {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"Order {{\n side: {},\n quantity: {},\n price: {},\n market_id: {},\n base_account_address: {},\n quote_account_address: {},\n execution_type: {},\n matching_order_ids: {:?}\n}}",
self.side,
self.quantity,
self.price
.clone()
.map_or("None".to_string(), |p| p.to_string()),
self.market_id,
self.base_account_address,
self.quote_account_address,
self.execution_type,
self.matching_order_ids
)
}
}
impl SendOrderResponse {
pub fn settlement_summary(&self) -> Option<String> {
let order = self.order.as_ref()?;
let parts: Vec<&str> = order.market_id.split("::").collect();
let (base_net, quote_net) = match parts.as_slice() {
[b, _, q, _] => (*b, *q),
_ => ("base", "quote"),
};
let b = &order.base_account_address;
let q = &order.quote_account_address;
let same_note = if b.starts_with("0x") && q.starts_with("0x") && b.eq_ignore_ascii_case(q) {
" — the SAME address on both chains"
} else {
""
};
Some(format!(
"Settlement: base leg → {b} on {base_net}; quote leg → {q} on {quote_net}{same_note}"
))
}
}
impl fmt::Display for SendOrderResponse {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"SendOrderResponse {{\n order_id: 0x{},\n order_in_book: {},\n order: {},\n trades: [{}]\n}}",
hex::encode(&self.order_id),
self.order_in_book,
self.order
.as_ref()
.map_or("None".to_string(), |o| format!("{}", o)),
self.trades
.iter()
.map(|t| format!("{:?}", t))
.collect::<Vec<_>>()
.join(", ")
)
}
}