rusty_feeder/exchange/binance/futures/data/
trade.rs1use rust_decimal::Decimal;
7use rust_decimal_macros::dec;
8use serde::{Deserialize, Serialize};
9use smartstring::alias::String;
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13#[repr(align(16))] pub struct AggTradeMessage {
15 #[serde(rename = "e")]
17 pub event_type: String,
18
19 #[serde(rename = "E")]
21 pub event_time: u64,
22
23 #[serde(rename = "s")]
25 pub symbol: String,
26
27 #[serde(rename = "a")]
29 pub agg_trade_id: u64,
30
31 #[serde(rename = "p")]
33 pub price: String,
34
35 #[serde(rename = "q")]
37 pub quantity: String,
38
39 #[serde(rename = "f")]
41 pub first_trade_id: u64,
42
43 #[serde(rename = "l")]
45 pub last_trade_id: u64,
46
47 #[serde(rename = "T")]
49 pub trade_time: u64,
50
51 #[serde(rename = "m")]
53 pub is_buyer_market_maker: bool,
54}
55
56#[derive(Debug, Clone)]
58#[repr(align(16))] pub struct ParsedAggTradeData {
60 pub symbol: String,
62
63 pub agg_trade_id: u64,
65
66 pub price: Decimal,
68
69 pub quantity: Decimal,
71
72 pub is_buyer_market_maker: bool,
74
75 pub trade_time: u64,
77
78 pub event_time: u64,
80}
81
82impl From<AggTradeMessage> for ParsedAggTradeData {
83 fn from(msg: AggTradeMessage) -> Self {
84 ParsedAggTradeData {
85 symbol: msg.symbol,
86 agg_trade_id: msg.agg_trade_id,
87 price: msg.price.parse().unwrap_or(dec!(0)),
88 quantity: msg.quantity.parse().unwrap_or(dec!(0)),
89 is_buyer_market_maker: msg.is_buyer_market_maker,
90 trade_time: msg.trade_time,
91 event_time: msg.event_time,
92 }
93 }
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct LiquidationOrderMessage {
99 #[serde(rename = "e")]
101 pub event_type: String,
102
103 #[serde(rename = "E")]
105 pub event_time: u64,
106
107 #[serde(rename = "o")]
109 pub order: LiquidationOrder,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct LiquidationOrder {
115 #[serde(rename = "s")]
117 pub symbol: String,
118
119 #[serde(rename = "S")]
121 pub side: String,
122
123 #[serde(rename = "o")]
125 pub order_type: String,
126
127 #[serde(rename = "f")]
129 pub time_in_force: String,
130
131 #[serde(rename = "q")]
133 pub quantity: String,
134
135 #[serde(rename = "p")]
137 pub price: String,
138
139 #[serde(rename = "ap")]
141 pub avg_price: String,
142
143 #[serde(rename = "X")]
145 pub status: String,
146
147 #[serde(rename = "l")]
149 pub last_filled_quantity: String,
150
151 #[serde(rename = "z")]
153 pub last_filled_price: String,
154
155 #[serde(rename = "L")]
157 pub filled_accumulated_quantity: String,
158
159 #[serde(rename = "T")]
161 pub trade_time: u64,
162}
163
164#[derive(Debug, Clone)]
166#[repr(align(16))] pub struct ParsedLiquidationOrder {
168 pub symbol: String,
170
171 pub side: String,
173
174 pub price: Decimal,
176
177 pub quantity: Decimal,
179
180 pub trade_time: u64,
182
183 pub event_time: u64,
185}
186
187impl From<LiquidationOrderMessage> for ParsedLiquidationOrder {
188 fn from(msg: LiquidationOrderMessage) -> Self {
189 ParsedLiquidationOrder {
190 symbol: msg.order.symbol,
191 side: msg.order.side,
192 price: msg.order.price.parse().unwrap_or(dec!(0)),
193 quantity: msg.order.quantity.parse().unwrap_or(dec!(0)),
194 trade_time: msg.order.trade_time,
195 event_time: msg.event_time,
196 }
197 }
198}