1use serde::{Deserialize, Serialize};
19use strum::{AsRefStr, Display, EnumIter, EnumString};
20
21#[derive(
23 Clone,
24 Debug,
25 Display,
26 PartialEq,
27 Eq,
28 Hash,
29 AsRefStr,
30 EnumIter,
31 EnumString,
32 Serialize,
33 Deserialize,
34)]
35#[serde(rename_all = "camelCase")]
36pub enum OKXWsErrorType {
37 Error,
39 SubscriptionError,
41 UnsubscriptionError,
43 AuthenticationError,
45 RateLimit,
47}
48
49#[derive(
51 Clone,
52 Debug,
53 Display,
54 PartialEq,
55 Eq,
56 Hash,
57 AsRefStr,
58 EnumIter,
59 EnumString,
60 Serialize,
61 Deserialize,
62)]
63#[serde(rename_all = "kebab-case")]
64pub enum OKXWsOperation {
65 Subscribe,
67 Unsubscribe,
69 Order,
71 CancelOrder,
73 AmendOrder,
75 BatchOrders,
77 BatchCancelOrders,
79 BatchAmendOrders,
81 MassCancel,
83 OrderAlgo,
85 CancelAlgos,
87}
88
89#[derive(
90 Clone,
91 Debug,
92 Display,
93 PartialEq,
94 Eq,
95 Hash,
96 AsRefStr,
97 EnumIter,
98 EnumString,
99 Serialize,
100 Deserialize,
101)]
102#[serde(rename_all = "camelCase")]
103pub enum OKXSubscriptionEvent {
104 Subscribe,
105 Unsubscribe,
106}
107
108#[derive(
109 Clone,
110 Debug,
111 Display,
112 PartialEq,
113 Eq,
114 Hash,
115 AsRefStr,
116 EnumIter,
117 EnumString,
118 Serialize,
119 Deserialize,
120)]
121pub enum OKXWsChannel {
122 #[serde(rename = "instruments")]
124 Instruments,
125 #[serde(rename = "tickers")]
126 Tickers,
127 #[serde(rename = "open-interest")]
128 OpenInterest,
129 #[serde(rename = "trades")]
130 Trades,
131 #[serde(rename = "trades-all")]
132 TradesAll,
133 #[serde(rename = "estimated-price")]
134 EstimatedPrice,
135 #[serde(rename = "mark-price")]
136 MarkPrice,
137 #[serde(rename = "price-limit")]
138 PriceLimit,
139 #[serde(rename = "books")]
140 Books, #[serde(rename = "books5")]
142 Books5,
143 #[serde(rename = "books50-l2-tbt")]
144 Books50Tbt,
145 #[serde(rename = "books-l2-tbt")]
146 BooksTbt,
147 #[serde(rename = "bbo-tbt")]
148 BboTbt,
149 #[serde(rename = "opt-summary")]
150 OptionSummary,
151 #[serde(rename = "funding-rate")]
152 FundingRate,
153 #[serde(rename = "event-contract-markets")]
154 EventContractMarkets,
155 #[serde(rename = "index-tickers")]
156 IndexTickers,
157 #[serde(rename = "status")]
158 Status,
159 #[serde(rename = "account")]
161 Account,
162 #[serde(rename = "positions")]
163 Positions,
164 #[serde(rename = "orders")]
167 Orders,
168 #[serde(rename = "sprd-orders")]
169 SprdOrders,
170 #[serde(rename = "sprd-bbo-tbt")]
171 SprdBboTbt,
172 #[serde(rename = "sprd-books5")]
173 SprdBooks5,
174 #[serde(rename = "sprd-public-trades")]
175 SprdPublicTrades,
176 #[serde(rename = "fills")]
177 Fills,
178 #[serde(rename = "orders-algo")]
179 OrdersAlgo,
180 #[serde(rename = "algo-advance")]
181 AlgoAdvance,
182 #[serde(rename = "candle1s")]
213 Candle1Second,
214 #[serde(rename = "candle1m")]
215 Candle1Minute,
216 #[serde(rename = "candle3m")]
217 Candle3Minute,
218 #[serde(rename = "candle5m")]
219 Candle5Minute,
220 #[serde(rename = "candle15m")]
221 Candle15Minute,
222 #[serde(rename = "candle30m")]
223 Candle30Minute,
224 #[serde(rename = "candle1H")]
225 Candle1Hour,
226 #[serde(rename = "candle2H")]
227 Candle2Hour,
228 #[serde(rename = "candle4H")]
229 Candle4Hour,
230 #[serde(rename = "candle6H")]
231 Candle6Hour,
232 #[serde(rename = "candle12H")]
233 Candle12Hour,
234 #[serde(rename = "candle1D")]
235 Candle1Day,
236 #[serde(rename = "candle2D")]
237 Candle2Day,
238 #[serde(rename = "candle3D")]
239 Candle3Day,
240 #[serde(rename = "candle5D")]
241 Candle5Day,
242 #[serde(rename = "candle1W")]
243 Candle1Week,
244 #[serde(rename = "candle1M")]
245 Candle1Month,
246 #[serde(rename = "candle3M")]
247 Candle3Month,
248 #[serde(rename = "candle6M")]
249 Candle6Month,
250 #[serde(rename = "candle1Y")]
251 Candle1Year,
252
253 #[serde(rename = "mark-price-candle1s")]
255 MarkPriceCandle1Second,
256 #[serde(rename = "mark-price-candle1m")]
257 MarkPriceCandle1Minute,
258 #[serde(rename = "mark-price-candle3m")]
259 MarkPriceCandle3Minute,
260 #[serde(rename = "mark-price-candle5m")]
261 MarkPriceCandle5Minute,
262 #[serde(rename = "mark-price-candle15m")]
263 MarkPriceCandle15Minute,
264 #[serde(rename = "mark-price-candle30m")]
265 MarkPriceCandle30Minute,
266 #[serde(rename = "mark-price-candle1H")]
267 MarkPriceCandle1Hour,
268 #[serde(rename = "mark-price-candle2H")]
269 MarkPriceCandle2Hour,
270 #[serde(rename = "mark-price-candle4H")]
271 MarkPriceCandle4Hour,
272 #[serde(rename = "mark-price-candle6H")]
273 MarkPriceCandle6Hour,
274 #[serde(rename = "mark-price-candle12H")]
275 MarkPriceCandle12Hour,
276 #[serde(rename = "mark-price-candle1D")]
277 MarkPriceCandle1Day,
278 #[serde(rename = "mark-price-candle2D")]
279 MarkPriceCandle2Day,
280 #[serde(rename = "mark-price-candle3D")]
281 MarkPriceCandle3Day,
282 #[serde(rename = "mark-price-candle5D")]
283 MarkPriceCandle5Day,
284 #[serde(rename = "mark-price-candle1W")]
285 MarkPriceCandle1Week,
286 #[serde(rename = "mark-price-candle1M")]
287 MarkPriceCandle1Month,
288 #[serde(rename = "mark-price-candle3M")]
289 MarkPriceCandle3Month,
290}
291
292impl OKXWsChannel {
293 #[must_use]
296 pub const fn is_spread(&self) -> bool {
297 matches!(
298 self,
299 Self::SprdOrders | Self::SprdBboTbt | Self::SprdBooks5 | Self::SprdPublicTrades
300 )
301 }
302}