rusty_feeder/exchange/binance/spot/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 TradeMessage {
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 = "t")]
29 pub 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 = "b", default)]
41 pub buyer_order_id: Option<u64>,
42
43 #[serde(rename = "a", default)]
45 pub seller_order_id: Option<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 #[serde(rename = "M", default)]
57 pub ignore: bool,
58}
59
60#[derive(Debug, Clone)]
62#[repr(align(16))] pub struct ParsedTradeData {
64 pub symbol: String,
66
67 pub trade_id: u64,
69
70 pub price: Decimal,
72
73 pub quantity: Decimal,
75
76 pub is_buyer_market_maker: bool,
78
79 pub trade_time: u64,
81
82 pub event_time: u64,
84}
85
86impl From<TradeMessage> for ParsedTradeData {
87 fn from(msg: TradeMessage) -> Self {
88 ParsedTradeData {
89 symbol: msg.symbol,
90 trade_id: msg.trade_id,
91 price: msg.price.parse().unwrap_or(dec!(0)),
92 quantity: msg.quantity.parse().unwrap_or(dec!(0)),
93 is_buyer_market_maker: msg.is_buyer_market_maker,
94 trade_time: msg.trade_time,
95 event_time: msg.event_time,
96 }
97 }
98}