bybit_rust_api/ws/private/
order.rs1use serde::Deserialize;
8
9#[derive(Debug, Clone, Deserialize)]
11pub struct OrderData {
12 #[serde(rename = "category")]
14 #[serde(default)]
15 pub category: Option<String>,
16 #[serde(rename = "symbol")]
18 #[serde(default)]
19 pub symbol: Option<String>,
20 #[serde(rename = "orderId")]
22 #[serde(default)]
23 pub order_id: Option<String>,
24 #[serde(rename = "orderLinkId")]
26 #[serde(default)]
27 pub order_link_id: Option<String>,
28 #[serde(rename = "blockTradeId")]
30 #[serde(default)]
31 pub block_trade_id: Option<String>,
32 #[serde(rename = "side")]
34 #[serde(default)]
35 pub side: Option<String>,
36 #[serde(rename = "orderType")]
38 #[serde(default)]
39 pub order_type: Option<String>,
40 #[serde(rename = "stopOrderType")]
42 #[serde(default)]
43 pub stop_order_type: Option<String>,
44 #[serde(rename = "price")]
46 #[serde(default)]
47 pub price: Option<String>,
48 #[serde(rename = "qty")]
50 #[serde(default)]
51 pub qty: Option<String>,
52 #[serde(rename = "timeInForce")]
54 #[serde(default)]
55 pub time_in_force: Option<String>,
56 #[serde(rename = "orderStatus")]
58 #[serde(default)]
59 pub order_status: Option<String>,
60 #[serde(rename = "leavesQty")]
62 #[serde(default)]
63 pub leaves_qty: Option<String>,
64 #[serde(rename = "cumExecQty")]
66 #[serde(default)]
67 pub cum_exec_qty: Option<String>,
68 #[serde(rename = "cumExecValue")]
70 #[serde(default)]
71 pub cum_exec_value: Option<String>,
72 #[serde(rename = "cumExecFee")]
74 #[serde(default)]
75 pub cum_exec_fee: Option<String>,
76 #[serde(rename = "avgPrice")]
78 #[serde(default)]
79 pub avg_price: Option<String>,
80 #[serde(rename = "rejectReason")]
82 #[serde(default)]
83 pub reject_reason: Option<String>,
84 #[serde(rename = "cancelType")]
86 #[serde(default)]
87 pub cancel_type: Option<String>,
88 #[serde(rename = "createType")]
90 #[serde(default)]
91 pub create_type: Option<String>,
92 #[serde(rename = "isLeverage")]
94 #[serde(default)]
95 pub is_leverage: Option<String>,
96 #[serde(rename = "positionIdx")]
98 #[serde(default)]
99 pub position_idx: Option<i32>,
100 #[serde(rename = "takeProfit")]
102 #[serde(default)]
103 pub take_profit: Option<String>,
104 #[serde(rename = "stopLoss")]
106 #[serde(default)]
107 pub stop_loss: Option<String>,
108 #[serde(rename = "triggerPrice")]
110 #[serde(default)]
111 pub trigger_price: Option<String>,
112 #[serde(rename = "triggerDirection")]
114 #[serde(default)]
115 pub trigger_direction: Option<i32>,
116 #[serde(rename = "triggerBy")]
118 #[serde(default)]
119 pub trigger_by: Option<String>,
120 #[serde(rename = "reduceOnly")]
122 #[serde(default)]
123 pub reduce_only: Option<bool>,
124 #[serde(rename = "closeOnTrigger")]
126 #[serde(default)]
127 pub close_on_trigger: Option<bool>,
128 #[serde(rename = "smpType")]
130 #[serde(default)]
131 pub smp_type: Option<String>,
132 #[serde(rename = "smpGroup")]
134 #[serde(default)]
135 pub smp_group: Option<i32>,
136 #[serde(rename = "createdTime")]
138 #[serde(default)]
139 pub created_time: Option<String>,
140 #[serde(rename = "updatedTime")]
142 #[serde(default)]
143 pub updated_time: Option<String>,
144}
145
146#[cfg(test)]
147mod tests {
148 use super::*;
149
150 #[test]
151 fn test_parse_order() {
152 let json = serde_json::json!({
153 "category": "linear",
154 "symbol": "BTCUSDT",
155 "orderId": "order-789",
156 "side": "Buy",
157 "orderType": "Limit",
158 "price": "50000.00",
159 "qty": "0.01",
160 "orderStatus": "New",
161 "leavesQty": "0.01",
162 "cumExecQty": "0"
163 });
164
165 let order: OrderData = serde_json::from_value(json).unwrap();
166 assert_eq!(order.symbol.as_deref(), Some("BTCUSDT"));
167 assert_eq!(order.order_status.as_deref(), Some("New"));
168 assert_eq!(order.qty.as_deref(), Some("0.01"));
169 }
170}