1pub mod futures;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Serialize)]
9#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
10pub enum SecurityType {
11 None,
12 Trade,
13 Margin,
14 UserData,
15 UserStream,
16 MarketData,
17}
18
19#[derive(Clone, Debug, Deserialize, Serialize)]
20#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
21pub enum SymbolStatus {
22 PreTrading,
23 Trading,
24 PostTrading,
25 EndOfDay,
26 Halt,
27 AuctionMatch,
28 Break,
29}
30
31#[derive(Clone, Debug, Deserialize, Serialize)]
32#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
33pub enum Permission {
34 Spot,
35 Margin,
36 Leveraged,
37 TrdGrp002,
38 TrdGrp003,
39 TrdGrp004,
40 TrdGrp005,
41 TrdGrp006,
42 TrdGrp007,
43 TrdGrp008,
44 TrdGrp009,
45 TrdGrp010,
46 TrdGrp011,
47 TrdGrp012,
48 TrdGrp013,
49 TrdGrp014,
50 TrdGrp015,
51 TrdGrp016,
52 TrdGrp017,
53 TrdGrp018,
54 TrdGrp019,
55 TrdGrp020,
56 TrdGrp021,
57 TrdGrp022,
58 TrdGrp023,
59 TrdGrp024,
60 TrdGrp025,
61}
62
63#[derive(Clone, Debug, Deserialize, Serialize)]
64#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
65pub enum OrderStatus {
66 New,
67 PendingNew,
68 PartiallyFilled,
69 Filled,
70 Canceled,
71 PendingCancel,
72 Rejected,
73 Expired,
74 ExpiredInMatch,
75}
76
77#[derive(Clone, Debug, Deserialize, Serialize)]
78#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
79pub enum OrderListStatus {
80 Response,
81 ExecStarted,
82 AllDone,
83}
84
85#[derive(Clone, Debug, Deserialize, Serialize)]
86#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
87pub enum OrderListOrderStatus {
88 Executing,
89 AllDone,
90 Reject,
91}
92
93#[derive(Clone, Debug, Deserialize, Serialize)]
94#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
95pub enum ContingencyType {
96 Oco,
97 Oto,
98}
99
100#[derive(Clone, Debug, Deserialize, Serialize)]
101#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
102pub enum AllocationType {
103 Sor,
104}
105
106#[derive(Clone, Debug, Deserialize, Serialize)]
107#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
108pub enum OrderType {
109 Limit,
110 Market,
111 StopLoss,
112 StopLossLimit,
113 TakeProfit,
114 TakeProfitLimit,
115 LimitMaker,
116}
117
118#[derive(Clone, Debug, Deserialize, Serialize)]
119#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
120pub enum ResponseType {
121 Ack,
122 Result,
123 Full,
124}
125
126#[derive(Clone, Debug, Deserialize, Serialize)]
127#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
128pub enum SideEffectType {
129 NoSideEffect,
130 MarginBuy,
131 AutoRepay,
132 AutoBorrowRepay,
133}
134
135#[derive(Clone, Debug, Deserialize, Serialize)]
136#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
137pub enum OrderRateLimitExceededMode {
138 DoNothing,
139 CancelOnly,
140}
141
142#[derive(Clone, Debug, Deserialize, Serialize)]
143#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
144pub enum WorkingFloor {
145 Exchange,
146 Sor,
147}
148
149#[derive(Clone, Debug, Deserialize, Serialize)]
150#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
151pub enum OrderSide {
152 Buy,
153 Sell,
154}
155
156#[derive(Clone, Debug, Deserialize, Serialize)]
157#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
158pub enum TimeInForce {
159 Gtc, Ioc, Fok, }
163
164#[derive(Clone, Debug, Deserialize, Serialize)]
165#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
166pub enum SelfTradePreventionMode {
167 ExpireTaker,
168 ExpireMaker,
169 ExpireBoth,
170 None,
171}
172
173#[derive(Clone, Debug, Deserialize, Serialize)]
174#[serde(rename_all = "camelCase")]
175pub struct RateLimit {
176 pub rate_limit_type: String,
177 pub interval: RateLimitIntervals,
178 pub interval_num: i64,
179 pub limit: i64,
180}
181
182#[derive(Clone, Debug, Deserialize, Serialize)]
183#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
184pub enum RateLimitIntervals {
185 Second,
186 Minute,
187 Day,
188}
189
190#[derive(Clone, Debug, Deserialize, Serialize)]
191#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
192pub enum StpModes {
193 None,
194 ExpireMaker,
195 ExpireTaker,
196 ExpireBoth,
197}
198
199#[derive(Debug, Deserialize, Serialize)]
200#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
201pub enum CancelRestriction {
202 OnlyNew,
203 OnlyPartiallyFilled,
204}
205
206#[derive(Debug, Deserialize, Serialize)]
207#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
208pub enum CancelReplaceMode {
209 StopOnFailure,
210 AllowFailure,
211}
212
213#[derive(Debug, Deserialize, Serialize)]
214#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
215pub enum TickerType {
216 Full,
217 Mini,
218}
219
220#[derive(Debug)]
221pub enum KlineInterval {
222 OneSecond,
223 OneMinute,
224 ThreeMinutes,
225 FiveMinutes,
226 FifteenMinutes,
227 ThirtyMinutes,
228 OneHour,
229 TwoHours,
230 FourHours,
231 SixHours,
232 EightHours,
233 TwelveHours,
234 OneDay,
235 ThreeDays,
236 OneWeek,
237 OneMonth,
238}
239
240impl Serialize for KlineInterval {
241 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
242 where
243 S: serde::ser::Serializer,
244 {
245 let interval = match self {
246 KlineInterval::OneSecond => "1s",
247 KlineInterval::OneMinute => "1m",
248 KlineInterval::ThreeMinutes => "3m",
249 KlineInterval::FiveMinutes => "5m",
250 KlineInterval::FifteenMinutes => "15m",
251 KlineInterval::ThirtyMinutes => "30m",
252 KlineInterval::OneHour => "1h",
253 KlineInterval::TwoHours => "2h",
254 KlineInterval::FourHours => "4h",
255 KlineInterval::SixHours => "6h",
256 KlineInterval::EightHours => "8h",
257 KlineInterval::TwelveHours => "12h",
258 KlineInterval::OneDay => "1d",
259 KlineInterval::ThreeDays => "3d",
260 KlineInterval::OneWeek => "1w",
261 KlineInterval::OneMonth => "1M",
262 };
263 serializer.serialize_str(interval)
264 }
265}