use serde::Deserialize;
use super::ExtraFields;
use crate::model::NumberString;
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadOrderUpdate {
#[serde(default)]
pub sprd_id: String,
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub sz: NumberString,
#[serde(default)]
pub ord_type: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub fill_sz: NumberString,
#[serde(default)]
pub fill_px: NumberString,
#[serde(default)]
pub trade_id: String,
#[serde(default)]
pub acc_fill_sz: NumberString,
#[serde(default)]
pub pending_fill_sz: NumberString,
#[serde(default)]
pub pending_settle_sz: NumberString,
#[serde(default)]
pub canceled_sz: NumberString,
#[serde(default)]
pub avg_px: NumberString,
#[serde(default)]
pub state: String,
#[serde(default)]
pub cancel_source: String,
#[serde(default)]
pub req_id: String,
#[serde(default)]
pub code: String,
#[serde(default)]
pub msg: String,
#[serde(default)]
pub c_time: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(default)]
pub p_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadTradeLeg {
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub sz: NumberString,
#[serde(default)]
pub side: String,
#[serde(default)]
pub fee: NumberString,
#[serde(default)]
pub sz_cont: NumberString,
#[serde(default)]
pub fee_ccy: String,
#[serde(default)]
pub trade_id: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadTradeUpdate {
#[serde(default)]
pub sprd_id: String,
#[serde(default)]
pub trade_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub sz: NumberString,
#[serde(default)]
pub fill_px: NumberString,
#[serde(default)]
pub fill_sz: NumberString,
#[serde(default)]
pub side: String,
#[serde(default)]
pub state: String,
#[serde(default)]
pub exec_type: String,
#[serde(default)]
pub legs: Vec<SpreadTradeLeg>,
#[serde(default)]
pub ts: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadPlaceOrderResult {
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub s_code: String,
#[serde(default)]
pub s_msg: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadAmendOrderResult {
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub req_id: String,
#[serde(default)]
pub s_code: String,
#[serde(default)]
pub s_msg: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadCancelOrderResult {
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub s_code: String,
#[serde(default)]
pub s_msg: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct SpreadMassCancelResult {
#[serde(default)]
pub result: bool,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_operation_result() {
let row: SpreadAmendOrderResult = serde_json::from_str(
r#"{"ordId":"1","clOrdId":"c","reqId":"r","sCode":"0","sMsg":""}"#,
)
.unwrap();
assert_eq!(row.s_code, "0");
}
}