rusty_feeder/exchange/binance/common/
types.rs1use rust_decimal::Decimal;
7use serde::{Deserialize, Serialize};
8use smallvec::SmallVec;
9use smartstring::alias::String;
10use std::fmt::Debug;
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct BinanceSymbolInfo {
15 pub symbol: String,
17
18 #[serde(rename = "baseAsset")]
20 pub base_asset: String,
21
22 #[serde(rename = "quoteAsset")]
24 pub quote_asset: String,
25
26 #[serde(rename = "minQty")]
28 pub min_qty: Decimal,
29
30 #[serde(rename = "maxQty")]
32 pub max_qty: Decimal,
33
34 #[serde(rename = "stepSize")]
36 pub step_size: Decimal,
37
38 #[serde(rename = "minPrice")]
40 pub min_price: Decimal,
41
42 #[serde(rename = "maxPrice")]
44 pub max_price: Decimal,
45
46 #[serde(rename = "tickSize")]
48 pub tick_size: Decimal,
49
50 #[serde(rename = "minNotional")]
52 pub min_notional: Decimal,
53
54 #[serde(rename = "icebergAllowed")]
56 pub iceberg_allowed: bool,
57
58 pub status: String,
60
61 #[serde(rename = "baseAssetPrecision")]
63 pub base_asset_precision: u8,
64
65 #[serde(rename = "quoteAssetPrecision")]
67 pub quote_asset_precision: u8,
68
69 #[serde(rename = "orderTypes")]
71 pub order_types: SmallVec<[String; 8]>,
72
73 pub permissions: SmallVec<[String; 4]>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct BinanceOrderbookUpdate {
81 pub last_update_id: u64,
83
84 #[serde(rename = "U")]
86 pub first_update_id: u64,
87
88 #[serde(rename = "u")]
90 pub final_update_id: u64,
91
92 #[serde(default)]
94 pub bids: SmallVec<[(String, String); 32]>,
95
96 #[serde(default)]
98 pub asks: SmallVec<[(String, String); 32]>,
99
100 #[serde(default)]
102 pub event_time: Option<u64>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct BinanceOrderbookSnapshot {
108 pub last_update_id: u64,
110
111 pub bids: SmallVec<[[String; 2]; 32]>,
113
114 pub asks: SmallVec<[[String; 2]; 32]>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct BinanceTradeUpdate {
121 #[serde(rename = "e")]
123 pub event_type: String,
124
125 #[serde(rename = "E")]
127 pub event_time: u64,
128
129 #[serde(rename = "s")]
131 pub symbol: String,
132
133 #[serde(rename = "t")]
135 pub trade_id: u64,
136
137 #[serde(rename = "p")]
139 pub price: String,
140
141 #[serde(rename = "q")]
143 pub quantity: String,
144
145 #[serde(rename = "b")]
147 pub buyer_order_id: u64,
148
149 #[serde(rename = "a")]
151 pub seller_order_id: u64,
152
153 #[serde(rename = "T")]
155 pub trade_time: u64,
156
157 #[serde(rename = "m")]
159 pub is_buyer_maker: bool,
160
161 #[serde(rename = "M", default)]
163 pub is_best_match: bool,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
168pub struct BinanceTicker {
169 pub symbol: String,
171
172 #[serde(rename = "priceChange")]
174 pub price_change: String,
175
176 #[serde(rename = "priceChangePercent")]
178 pub price_change_percent: String,
179
180 #[serde(rename = "weightedAvgPrice")]
182 pub weighted_avg_price: String,
183
184 #[serde(rename = "lastPrice")]
186 pub last_price: String,
187
188 #[serde(rename = "lastQty")]
190 pub last_qty: String,
191
192 #[serde(rename = "bidPrice")]
194 pub bid_price: String,
195
196 #[serde(rename = "bidQty")]
198 pub bid_qty: String,
199
200 #[serde(rename = "askPrice")]
202 pub ask_price: String,
203
204 #[serde(rename = "askQty")]
206 pub ask_qty: String,
207
208 #[serde(rename = "openPrice")]
210 pub open_price: String,
211
212 #[serde(rename = "highPrice")]
214 pub high_price: String,
215
216 #[serde(rename = "lowPrice")]
218 pub low_price: String,
219
220 pub volume: String,
222
223 #[serde(rename = "quoteVolume")]
225 pub quote_volume: String,
226
227 #[serde(rename = "openTime")]
229 pub open_time: u64,
230
231 #[serde(rename = "closeTime")]
233 pub close_time: u64,
234
235 #[serde(rename = "firstId")]
237 pub first_id: u64,
238
239 #[serde(rename = "lastId")]
241 pub last_id: u64,
242
243 pub count: u64,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
249pub struct BinanceSubscriptionResponse {
250 pub id: u64,
252
253 pub result: Option<String>,
255
256 pub code: Option<i32>,
258
259 pub msg: Option<String>,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
265pub struct BinanceErrorResponse {
266 pub code: i32,
268
269 pub msg: String,
271}
272
273#[derive(Debug, Clone, Serialize, Deserialize)]
275pub struct BinanceListenKeyResponse {
276 #[serde(rename = "listenKey")]
278 pub listen_key: String,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize)]
283pub struct BinanceExchangeInfoResponse {
284 pub timezone: String,
286
287 #[serde(rename = "serverTime")]
289 pub server_time: u64,
290
291 #[serde(rename = "rateLimits")]
293 pub rate_limits: Vec<BinanceRateLimit>,
294
295 #[serde(default, rename = "exchangeFilters")]
297 pub exchange_filters: Vec<simd_json::OwnedValue>,
298
299 pub symbols: Vec<BinanceSymbolInfo>,
301}
302
303#[derive(Debug, Clone, Serialize, Deserialize)]
305pub struct BinanceRateLimit {
306 #[serde(rename = "rateLimitType")]
308 pub rate_limit_type: String,
309
310 pub interval: String,
312
313 #[serde(rename = "intervalNum")]
315 pub interval_num: u32,
316
317 pub limit: u64,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
323pub struct BinanceHistoricalTrade {
324 pub id: u64,
326
327 pub price: String,
329
330 pub qty: String,
332
333 #[serde(rename = "quoteQty")]
335 pub quote_qty: String,
336
337 pub time: u64,
339
340 #[serde(rename = "isBuyerMaker")]
342 pub is_buyer_maker: bool,
343
344 #[serde(rename = "isBestMatch")]
346 pub is_best_match: bool,
347}