nautilus_okx/websocket/
enums.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16//! Enumerations representing OKX WebSocket message metadata and codes.
17
18use serde::{Deserialize, Serialize};
19use strum::{AsRefStr, Display, EnumIter, EnumString};
20
21/// Error types that can be returned by the WebSocket API.
22#[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    /// General error.
38    Error,
39    /// Error during subscription.
40    SubscriptionError,
41    /// Error during unsubscription.
42    UnsubscriptionError,
43    /// Authentication failure.
44    AuthenticationError,
45    /// Rate limit exceeded.
46    RateLimit,
47}
48
49/// Operation type for WebSocket commands.
50#[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    /// Subscribes to one or more topics.
66    Subscribe,
67    /// Unsubscribe from one or more topics.
68    Unsubscribe,
69    /// Place a new order.
70    Order,
71    /// Cancel an existing order.
72    CancelOrder,
73    /// Amend an existing order.
74    AmendOrder,
75    /// Place multiple orders.
76    BatchOrders,
77    /// Cancel multiple orders.
78    BatchCancelOrders,
79    /// Amend multiple orders.
80    BatchAmendOrders,
81    /// Mass cancel all orders for an instrument.
82    MassCancel,
83    /// Place a new algo order.
84    OrderAlgo,
85    /// Cancel algo orders.
86    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    // Public Channels
123    #[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, // Default depth
141    #[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 = "index-tickers")]
154    IndexTickers,
155    #[serde(rename = "status")]
156    Status,
157    // Private Channels
158    #[serde(rename = "account")]
159    Account,
160    // #[display(fmt = "positions")]
161    // Positions,
162    // #[display(fmt = "balance_and_position")]
163    // BalanceAndPosition,
164    #[serde(rename = "orders")]
165    Orders,
166    #[serde(rename = "fills")]
167    Fills,
168    #[serde(rename = "orders-algo")]
169    OrdersAlgo,
170    // #[display(fmt = "algo-advance")]
171    // AlgoAdvance,
172    // #[display(fmt = "liquidation-warning")]
173    // LiquidationWarning,
174    // #[display(fmt = "account-greeks")]
175    // AccountGreeks,
176    // #[display(fmt = "rfqs")]
177    // Rfqs,
178    // #[serde(rename = "quotes")]
179    // Quotes,
180    // #[display(fmt = "struc-block")]
181    // StructuredBlock,
182    // #[display(fmt = "spreads")]
183    // Spreads,
184    //
185    // // Trading Channels
186    // #[display(fmt = "orders-spot-margin")]
187    // SpotMarginOrders,
188    // #[display(fmt = "orders-futures")]
189    // FuturesOrders,
190    // #[display(fmt = "orders-swap")]
191    // SwapOrders,
192    // #[display(fmt = "orders-option")]
193    // OptionOrders,
194    //
195    // // Business Channels
196    // #[display(fmt = "deposit-info")]
197    // DepositInfo,
198    // #[display(fmt = "withdrawal-info")]
199    // WithdrawalInfo,
200
201    // Candlesticks
202    #[serde(rename = "candle1s")]
203    Candle1Second,
204    #[serde(rename = "candle1m")]
205    Candle1Minute,
206    #[serde(rename = "candle3m")]
207    Candle3Minute,
208    #[serde(rename = "candle5m")]
209    Candle5Minute,
210    #[serde(rename = "candle15m")]
211    Candle15Minute,
212    #[serde(rename = "candle30m")]
213    Candle30Minute,
214    #[serde(rename = "candle1H")]
215    Candle1Hour,
216    #[serde(rename = "candle2H")]
217    Candle2Hour,
218    #[serde(rename = "candle4H")]
219    Candle4Hour,
220    #[serde(rename = "candle6H")]
221    Candle6Hour,
222    #[serde(rename = "candle12H")]
223    Candle12Hour,
224    #[serde(rename = "candle1D")]
225    Candle1Day,
226    #[serde(rename = "candle2D")]
227    Candle2Day,
228    #[serde(rename = "candle3D")]
229    Candle3Day,
230    #[serde(rename = "candle5D")]
231    Candle5Day,
232    #[serde(rename = "candle1W")]
233    Candle1Week,
234    #[serde(rename = "candle1M")]
235    Candle1Month,
236    #[serde(rename = "candle3M")]
237    Candle3Month,
238    #[serde(rename = "candle6M")]
239    Candle6Month,
240    #[serde(rename = "candle1Y")]
241    Candle1Year,
242
243    // Mark Price Candlesticks
244    #[serde(rename = "mark-price-candle1s")]
245    MarkPriceCandle1Second,
246    #[serde(rename = "mark-price-candle1m")]
247    MarkPriceCandle1Minute,
248    #[serde(rename = "mark-price-candle3m")]
249    MarkPriceCandle3Minute,
250    #[serde(rename = "mark-price-candle5m")]
251    MarkPriceCandle5Minute,
252    #[serde(rename = "mark-price-candle15m")]
253    MarkPriceCandle15Minute,
254    #[serde(rename = "mark-price-candle30m")]
255    MarkPriceCandle30Minute,
256    #[serde(rename = "mark-price-candle1H")]
257    MarkPriceCandle1Hour,
258    #[serde(rename = "mark-price-candle2H")]
259    MarkPriceCandle2Hour,
260    #[serde(rename = "mark-price-candle4H")]
261    MarkPriceCandle4Hour,
262    #[serde(rename = "mark-price-candle6H")]
263    MarkPriceCandle6Hour,
264    #[serde(rename = "mark-price-candle12H")]
265    MarkPriceCandle12Hour,
266    #[serde(rename = "mark-price-candle1D")]
267    MarkPriceCandle1Day,
268    #[serde(rename = "mark-price-candle2D")]
269    MarkPriceCandle2Day,
270    #[serde(rename = "mark-price-candle3D")]
271    MarkPriceCandle3Day,
272    #[serde(rename = "mark-price-candle5D")]
273    MarkPriceCandle5Day,
274    #[serde(rename = "mark-price-candle1W")]
275    MarkPriceCandle1Week,
276    #[serde(rename = "mark-price-candle1M")]
277    MarkPriceCandle1Month,
278    #[serde(rename = "mark-price-candle3M")]
279    MarkPriceCandle3Month,
280}