rusty_feeder/exchange/bithumb/
types.rs1use crate::provider::prelude::*;
6use rust_decimal::Decimal;
7use serde::{Deserialize, Serialize};
8use smartstring::alias::String;
9
10pub const BITHUMB_WS_URL: &str = "wss://ws-api.bithumb.com/websocket/v1";
12
13pub const BITHUMB_PUBLIC_WS_URL: &str = "wss://pubwss.bithumb.com/pub/ws";
15
16pub const BITHUMB_API_URL: &str = "https://api.bithumb.com";
18
19pub const BITHUMB_PRIVATE_WS_URL: &str = "wss://ws-api.bithumb.com/websocket/v1/private";
21
22pub const BITHUMB_RATE_LIMITS: &[RateLimit] = &[
24 RateLimit {
25 limit_type: "REQUEST_WEIGHT",
26 interval: "MINUTE",
27 interval_num: 1,
28 limit: 900, },
30 RateLimit {
31 limit_type: "ORDERS",
32 interval: "MINUTE",
33 interval_num: 1,
34 limit: 200, },
36 RateLimit {
37 limit_type: "RAW_REQUESTS",
38 interval: "SECOND",
39 interval_num: 1,
40 limit: 30, },
42];
43
44#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
46#[serde(rename_all = "lowercase")]
47pub enum BithumbMessageType {
48 #[serde(rename = "trade")]
50 Trade,
51
52 #[serde(rename = "orderbook")]
54 Orderbook,
55
56 #[serde(rename = "ticker")]
58 Ticker,
59
60 #[serde(rename = "status")]
62 Status,
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
67#[serde(rename_all = "UPPERCASE")]
68pub enum StreamType {
69 #[serde(rename = "SNAPSHOT")]
71 Snapshot,
72
73 #[serde(rename = "REALTIME")]
75 Realtime,
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
80#[serde(rename_all = "UPPERCASE")]
81pub enum ChangeDirection {
82 #[serde(rename = "RISE")]
84 Rise,
85
86 #[serde(rename = "EVEN")]
88 Even,
89
90 #[serde(rename = "FALL")]
92 Fall,
93}
94
95#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
97#[serde(rename_all = "UPPERCASE")]
98pub enum TradeSide {
99 #[serde(rename = "ASK")]
101 Ask,
102
103 #[serde(rename = "BID")]
105 Bid,
106}
107
108#[derive(Debug, Clone, Deserialize, Serialize)]
110pub struct StatusMessage {
111 pub status: String,
113}
114
115#[derive(Debug, Clone, Serialize)]
117pub struct TicketRequest {
118 pub ticket: String,
120}
121
122#[derive(Debug, Clone, Serialize)]
124pub struct SubscriptionRequest {
125 #[serde(rename = "type")]
127 pub data_type: String,
128
129 pub codes: Vec<String>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub level: Option<f64>,
135
136 #[serde(skip_serializing_if = "Option::is_none", rename = "isOnlySnapshot")]
138 pub is_only_snapshot: Option<bool>,
139
140 #[serde(skip_serializing_if = "Option::is_none", rename = "isOnlyRealtime")]
142 pub is_only_realtime: Option<bool>,
143}
144
145#[derive(Debug, Clone, Serialize)]
147pub struct FormatRequest {
148 pub format: String,
150}
151
152#[derive(Debug, Clone, Deserialize, Serialize)]
154#[repr(align(64))] pub struct TradeResponse {
156 #[serde(rename = "type")]
158 pub message_type: String,
159
160 pub code: String,
162
163 pub trade_price: Decimal,
165
166 pub trade_volume: Decimal,
168
169 pub ask_bid: String,
171
172 pub prev_closing_price: Decimal,
174
175 pub change: String,
177
178 pub change_price: Decimal,
180
181 pub trade_date: String,
183
184 pub trade_time: String,
186
187 pub trade_timestamp: u64,
189
190 pub sequential_id: u64,
192
193 pub timestamp: u64,
195
196 pub stream_type: String,
198}
199
200#[derive(Debug, Clone, Deserialize, Serialize)]
202pub struct OrderbookUnit {
203 pub ask_price: Decimal,
205
206 pub bid_price: Decimal,
208
209 pub ask_size: Decimal,
211
212 pub bid_size: Decimal,
214}
215
216#[derive(Debug, Clone, Deserialize, Serialize)]
218#[repr(align(64))] pub struct OrderbookResponse {
220 #[serde(rename = "type")]
222 pub message_type: String,
223
224 pub code: String,
226
227 pub total_ask_size: Decimal,
229
230 pub total_bid_size: Decimal,
232
233 pub orderbook_units: Vec<OrderbookUnit>,
235
236 pub level: f64,
238
239 pub timestamp: u64,
241
242 pub stream_type: String,
244}