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
16use serde::{Deserialize, Serialize};
17use strum::{AsRefStr, Display, EnumIter, EnumString};
18
19/// Error types that can be returned by the WebSocket API.
20#[derive(
21    Clone,
22    Debug,
23    Display,
24    PartialEq,
25    Eq,
26    Hash,
27    AsRefStr,
28    EnumIter,
29    EnumString,
30    Serialize,
31    Deserialize,
32)]
33#[serde(rename_all = "camelCase")]
34pub enum OKXWsErrorType {
35    /// General error.
36    Error,
37    /// Error during subscription.
38    SubscriptionError,
39    /// Error during unsubscription.
40    UnsubscriptionError,
41    /// Authentication failure.
42    AuthenticationError,
43    /// Rate limit exceeded.
44    RateLimit,
45}
46
47/// Operation type for WebSocket commands.
48#[derive(
49    Clone,
50    Debug,
51    Display,
52    PartialEq,
53    Eq,
54    Hash,
55    AsRefStr,
56    EnumIter,
57    EnumString,
58    Serialize,
59    Deserialize,
60)]
61#[serde(rename_all = "kebab-case")]
62pub enum OKXWsOperation {
63    /// Subscribes to one or more topics.
64    Subscribe,
65    /// Unsubscribe from one or more topics.
66    Unsubscribe,
67    /// Place a new order.
68    Order,
69    /// Cancel an existing order.
70    CancelOrder,
71    /// Amend an existing order.
72    AmendOrder,
73    /// Place multiple orders.
74    BatchOrders,
75    /// Cancel multiple orders.
76    BatchCancelOrders,
77    /// Amend multiple orders.
78    BatchAmendOrders,
79    /// Mass cancel all orders for an instrument.
80    MassCancel,
81}
82
83#[derive(
84    Clone,
85    Debug,
86    Display,
87    PartialEq,
88    Eq,
89    Hash,
90    AsRefStr,
91    EnumIter,
92    EnumString,
93    Serialize,
94    Deserialize,
95)]
96#[serde(rename_all = "camelCase")]
97pub enum OKXSubscriptionEvent {
98    Subscribe,
99    Unsubscribe,
100}
101
102#[derive(
103    Clone,
104    Debug,
105    Display,
106    PartialEq,
107    Eq,
108    Hash,
109    AsRefStr,
110    EnumIter,
111    EnumString,
112    Serialize,
113    Deserialize,
114)]
115pub enum OKXWsChannel {
116    // Public Channels
117    #[serde(rename = "instruments")]
118    Instruments,
119    #[serde(rename = "tickers")]
120    Tickers,
121    #[serde(rename = "open-interest")]
122    OpenInterest,
123    #[serde(rename = "trades")]
124    Trades,
125    #[serde(rename = "trades-all")]
126    TradesAll,
127    #[serde(rename = "estimated-price")]
128    EstimatedPrice,
129    #[serde(rename = "mark-price")]
130    MarkPrice,
131    #[serde(rename = "price-limit")]
132    PriceLimit,
133    #[serde(rename = "books")]
134    Books, // Default depth
135    #[serde(rename = "books5")]
136    Books5,
137    #[serde(rename = "books50-l2-tbt")]
138    Books50Tbt,
139    #[serde(rename = "books-l2-tbt")]
140    BooksTbt,
141    #[serde(rename = "bbo-tbt")]
142    BboTbt,
143    #[serde(rename = "opt-summary")]
144    OptionSummary,
145    #[serde(rename = "funding-rate")]
146    FundingRate,
147    #[serde(rename = "index-tickers")]
148    IndexTickers,
149    #[serde(rename = "status")]
150    Status,
151    // Private Channels
152    #[serde(rename = "account")]
153    Account,
154    // #[display(fmt = "positions")]
155    // Positions,
156    // #[display(fmt = "balance_and_position")]
157    // BalanceAndPosition,
158    #[serde(rename = "orders")]
159    Orders,
160    #[serde(rename = "fills")]
161    Fills,
162    // #[display(fmt = "orders-algo")]
163    // AlgoOrders,
164    // #[display(fmt = "algo-advance")]
165    // AlgoAdvance,
166    // #[display(fmt = "liquidation-warning")]
167    // LiquidationWarning,
168    // #[display(fmt = "account-greeks")]
169    // AccountGreeks,
170    // #[display(fmt = "rfqs")]
171    // Rfqs,
172    // #[serde(rename = "quotes")]
173    // Quotes,
174    // #[display(fmt = "struc-block")]
175    // StructuredBlock,
176    // #[display(fmt = "spreads")]
177    // Spreads,
178    //
179    // // Trading Channels
180    // #[display(fmt = "orders-spot-margin")]
181    // SpotMarginOrders,
182    // #[display(fmt = "orders-futures")]
183    // FuturesOrders,
184    // #[display(fmt = "orders-swap")]
185    // SwapOrders,
186    // #[display(fmt = "orders-option")]
187    // OptionOrders,
188    //
189    // // Business Channels
190    // #[display(fmt = "deposit-info")]
191    // DepositInfo,
192    // #[display(fmt = "withdrawal-info")]
193    // WithdrawalInfo,
194
195    // Candlesticks
196    #[serde(rename = "candle1s")]
197    Candle1Second,
198    #[serde(rename = "candle1m")]
199    Candle1Minute,
200    #[serde(rename = "candle3m")]
201    Candle3Minute,
202    #[serde(rename = "candle5m")]
203    Candle5Minute,
204    #[serde(rename = "candle15m")]
205    Candle15Minute,
206    #[serde(rename = "candle30m")]
207    Candle30Minute,
208    #[serde(rename = "candle1H")]
209    Candle1Hour,
210    #[serde(rename = "candle2H")]
211    Candle2Hour,
212    #[serde(rename = "candle4H")]
213    Candle4Hour,
214    #[serde(rename = "candle6H")]
215    Candle6Hour,
216    #[serde(rename = "candle12H")]
217    Candle12Hour,
218    #[serde(rename = "candle1D")]
219    Candle1Day,
220    #[serde(rename = "candle2D")]
221    Candle2Day,
222    #[serde(rename = "candle3D")]
223    Candle3Day,
224    #[serde(rename = "candle5D")]
225    Candle5Day,
226    #[serde(rename = "candle1W")]
227    Candle1Week,
228    #[serde(rename = "candle1M")]
229    Candle1Month,
230    #[serde(rename = "candle3M")]
231    Candle3Month,
232    #[serde(rename = "candle6M")]
233    Candle6Month,
234    #[serde(rename = "candle1Y")]
235    Candle1Year,
236
237    // Mark Price Candlesticks
238    #[serde(rename = "mark-price-candle1s")]
239    MarkPriceCandle1Second,
240    #[serde(rename = "mark-price-candle1m")]
241    MarkPriceCandle1Minute,
242    #[serde(rename = "mark-price-candle3m")]
243    MarkPriceCandle3Minute,
244    #[serde(rename = "mark-price-candle5m")]
245    MarkPriceCandle5Minute,
246    #[serde(rename = "mark-price-candle15m")]
247    MarkPriceCandle15Minute,
248    #[serde(rename = "mark-price-candle30m")]
249    MarkPriceCandle30Minute,
250    #[serde(rename = "mark-price-candle1H")]
251    MarkPriceCandle1Hour,
252    #[serde(rename = "mark-price-candle2H")]
253    MarkPriceCandle2Hour,
254    #[serde(rename = "mark-price-candle4H")]
255    MarkPriceCandle4Hour,
256    #[serde(rename = "mark-price-candle6H")]
257    MarkPriceCandle6Hour,
258    #[serde(rename = "mark-price-candle12H")]
259    MarkPriceCandle12Hour,
260    #[serde(rename = "mark-price-candle1D")]
261    MarkPriceCandle1Day,
262    #[serde(rename = "mark-price-candle2D")]
263    MarkPriceCandle2Day,
264    #[serde(rename = "mark-price-candle3D")]
265    MarkPriceCandle3Day,
266    #[serde(rename = "mark-price-candle5D")]
267    MarkPriceCandle5Day,
268    #[serde(rename = "mark-price-candle1W")]
269    MarkPriceCandle1Week,
270    #[serde(rename = "mark-price-candle1M")]
271    MarkPriceCandle1Month,
272    #[serde(rename = "mark-price-candle3M")]
273    MarkPriceCandle3Month,
274}