nautilus_binance/futures/websocket/
messages.rs1use nautilus_model::{
21 data::{Data, OrderBookDeltas},
22 instruments::InstrumentAny,
23};
24use nautilus_network::websocket::WebSocketClient;
25use serde::{Deserialize, Serialize};
26use ustr::Ustr;
27
28use crate::common::enums::{
29 BinanceFuturesOrderType, BinanceKlineInterval, BinanceOrderStatus, BinanceSide,
30 BinanceTimeInForce, BinanceWsMethod,
31};
32
33#[derive(Debug, Clone)]
35pub enum NautilusFuturesWsMessage {
36 Data(Vec<Data>),
38 Deltas(OrderBookDeltas),
40 Instrument(Box<InstrumentAny>),
42 Error(BinanceFuturesWsErrorMsg),
44 RawJson(serde_json::Value),
46 Reconnected,
48}
49
50#[derive(Debug, Clone)]
52pub struct BinanceFuturesWsErrorMsg {
53 pub code: i64,
55 pub msg: String,
57}
58
59#[derive(Debug)]
61#[allow(
62 clippy::large_enum_variant,
63 reason = "Commands are ephemeral and immediately consumed"
64)]
65pub enum BinanceFuturesHandlerCommand {
66 SetClient(WebSocketClient),
68 Disconnect,
70 InitializeInstruments(Vec<InstrumentAny>),
72 UpdateInstrument(InstrumentAny),
74 Subscribe { streams: Vec<String> },
76 Unsubscribe { streams: Vec<String> },
78}
79
80#[derive(Debug, Clone, Deserialize)]
86pub struct BinanceFuturesAggTradeMsg {
87 #[serde(rename = "e")]
89 pub event_type: String,
90 #[serde(rename = "E")]
92 pub event_time: i64,
93 #[serde(rename = "s")]
95 pub symbol: Ustr,
96 #[serde(rename = "a")]
98 pub agg_trade_id: u64,
99 #[serde(rename = "p")]
101 pub price: String,
102 #[serde(rename = "q")]
104 pub quantity: String,
105 #[serde(rename = "f")]
107 pub first_trade_id: u64,
108 #[serde(rename = "l")]
110 pub last_trade_id: u64,
111 #[serde(rename = "T")]
113 pub trade_time: i64,
114 #[serde(rename = "m")]
116 pub is_buyer_maker: bool,
117}
118
119#[derive(Debug, Clone, Deserialize)]
121pub struct BinanceFuturesTradeMsg {
122 #[serde(rename = "e")]
124 pub event_type: String,
125 #[serde(rename = "E")]
127 pub event_time: i64,
128 #[serde(rename = "s")]
130 pub symbol: Ustr,
131 #[serde(rename = "t")]
133 pub trade_id: u64,
134 #[serde(rename = "p")]
136 pub price: String,
137 #[serde(rename = "q")]
139 pub quantity: String,
140 #[serde(rename = "T")]
142 pub trade_time: i64,
143 #[serde(rename = "m")]
145 pub is_buyer_maker: bool,
146}
147
148#[derive(Debug, Clone, Deserialize)]
150pub struct BinanceFuturesDepthUpdateMsg {
151 #[serde(rename = "e")]
153 pub event_type: String,
154 #[serde(rename = "E")]
156 pub event_time: i64,
157 #[serde(rename = "T")]
159 pub transaction_time: i64,
160 #[serde(rename = "s")]
162 pub symbol: Ustr,
163 #[serde(rename = "U")]
165 pub first_update_id: u64,
166 #[serde(rename = "u")]
168 pub final_update_id: u64,
169 #[serde(rename = "pu")]
171 pub prev_final_update_id: u64,
172 #[serde(rename = "b")]
174 pub bids: Vec<[String; 2]>,
175 #[serde(rename = "a")]
177 pub asks: Vec<[String; 2]>,
178}
179
180#[derive(Debug, Clone, Deserialize)]
182pub struct BinanceFuturesMarkPriceMsg {
183 #[serde(rename = "e")]
185 pub event_type: String,
186 #[serde(rename = "E")]
188 pub event_time: i64,
189 #[serde(rename = "s")]
191 pub symbol: Ustr,
192 #[serde(rename = "p")]
194 pub mark_price: String,
195 #[serde(rename = "i")]
197 pub index_price: String,
198 #[serde(rename = "P")]
200 pub estimated_settle_price: String,
201 #[serde(rename = "r")]
203 pub funding_rate: String,
204 #[serde(rename = "T")]
206 pub next_funding_time: i64,
207}
208
209#[derive(Debug, Clone, Deserialize)]
211pub struct BinanceFuturesBookTickerMsg {
212 #[serde(rename = "e")]
214 pub event_type: String,
215 #[serde(rename = "u")]
217 pub update_id: u64,
218 #[serde(rename = "E")]
220 pub event_time: i64,
221 #[serde(rename = "T")]
223 pub transaction_time: i64,
224 #[serde(rename = "s")]
226 pub symbol: Ustr,
227 #[serde(rename = "b")]
229 pub best_bid_price: String,
230 #[serde(rename = "B")]
232 pub best_bid_qty: String,
233 #[serde(rename = "a")]
235 pub best_ask_price: String,
236 #[serde(rename = "A")]
238 pub best_ask_qty: String,
239}
240
241#[derive(Debug, Clone, Deserialize)]
243pub struct BinanceFuturesKlineMsg {
244 #[serde(rename = "e")]
246 pub event_type: String,
247 #[serde(rename = "E")]
249 pub event_time: i64,
250 #[serde(rename = "s")]
252 pub symbol: Ustr,
253 #[serde(rename = "k")]
255 pub kline: BinanceFuturesKlineData,
256}
257
258#[derive(Debug, Clone, Deserialize)]
260pub struct BinanceFuturesKlineData {
261 #[serde(rename = "t")]
263 pub start_time: i64,
264 #[serde(rename = "T")]
266 pub close_time: i64,
267 #[serde(rename = "s")]
269 pub symbol: Ustr,
270 #[serde(rename = "i")]
272 pub interval: BinanceKlineInterval,
273 #[serde(rename = "f")]
275 pub first_trade_id: i64,
276 #[serde(rename = "L")]
278 pub last_trade_id: i64,
279 #[serde(rename = "o")]
281 pub open: String,
282 #[serde(rename = "c")]
284 pub close: String,
285 #[serde(rename = "h")]
287 pub high: String,
288 #[serde(rename = "l")]
290 pub low: String,
291 #[serde(rename = "v")]
293 pub volume: String,
294 #[serde(rename = "n")]
296 pub num_trades: i64,
297 #[serde(rename = "x")]
299 pub is_closed: bool,
300 #[serde(rename = "q")]
302 pub quote_volume: String,
303 #[serde(rename = "V")]
305 pub taker_buy_volume: String,
306 #[serde(rename = "Q")]
308 pub taker_buy_quote_volume: String,
309}
310
311#[derive(Debug, Clone, Deserialize)]
313pub struct BinanceFuturesLiquidationMsg {
314 #[serde(rename = "e")]
316 pub event_type: String,
317 #[serde(rename = "E")]
319 pub event_time: i64,
320 #[serde(rename = "o")]
322 pub order: BinanceFuturesLiquidationOrder,
323}
324
325#[derive(Debug, Clone, Deserialize)]
327pub struct BinanceFuturesLiquidationOrder {
328 #[serde(rename = "s")]
330 pub symbol: Ustr,
331 #[serde(rename = "S")]
333 pub side: BinanceSide,
334 #[serde(rename = "o")]
336 pub order_type: BinanceFuturesOrderType,
337 #[serde(rename = "f")]
339 pub time_in_force: BinanceTimeInForce,
340 #[serde(rename = "q")]
342 pub original_qty: String,
343 #[serde(rename = "p")]
345 pub price: String,
346 #[serde(rename = "ap")]
348 pub average_price: String,
349 #[serde(rename = "X")]
351 pub status: BinanceOrderStatus,
352 #[serde(rename = "l")]
354 pub last_filled_qty: String,
355 #[serde(rename = "z")]
357 pub accumulated_qty: String,
358 #[serde(rename = "T")]
360 pub trade_time: i64,
361}
362
363#[derive(Debug, Clone, Serialize)]
369pub struct BinanceFuturesWsSubscribeRequest {
370 pub method: BinanceWsMethod,
372 pub params: Vec<String>,
374 pub id: u64,
376}
377
378#[derive(Debug, Clone, Deserialize)]
380pub struct BinanceFuturesWsSubscribeResponse {
381 pub result: Option<serde_json::Value>,
383 pub id: u64,
385}
386
387#[derive(Debug, Clone, Deserialize)]
389pub struct BinanceFuturesWsErrorResponse {
390 pub code: i64,
392 pub msg: String,
394 pub id: Option<u64>,
396}