use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, EnumIter, EnumString};
#[derive(
Clone,
Debug,
Display,
PartialEq,
Eq,
Hash,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
#[serde(rename_all = "camelCase")]
pub enum OKXWsErrorType {
Error,
SubscriptionError,
UnsubscriptionError,
AuthenticationError,
RateLimit,
}
#[derive(
Clone,
Debug,
Display,
PartialEq,
Eq,
Hash,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
#[serde(rename_all = "kebab-case")]
pub enum OKXWsOperation {
Subscribe,
Unsubscribe,
Order,
CancelOrder,
AmendOrder,
BatchOrders,
BatchCancelOrders,
BatchAmendOrders,
MassCancel,
OrderAlgo,
CancelAlgos,
}
#[derive(
Clone,
Debug,
Display,
PartialEq,
Eq,
Hash,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
#[serde(rename_all = "camelCase")]
pub enum OKXSubscriptionEvent {
Subscribe,
Unsubscribe,
}
#[derive(
Clone,
Debug,
Display,
PartialEq,
Eq,
Hash,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
pub enum OKXWsChannel {
#[serde(rename = "instruments")]
Instruments,
#[serde(rename = "tickers")]
Tickers,
#[serde(rename = "open-interest")]
OpenInterest,
#[serde(rename = "trades")]
Trades,
#[serde(rename = "trades-all")]
TradesAll,
#[serde(rename = "estimated-price")]
EstimatedPrice,
#[serde(rename = "mark-price")]
MarkPrice,
#[serde(rename = "price-limit")]
PriceLimit,
#[serde(rename = "books")]
Books, #[serde(rename = "books5")]
Books5,
#[serde(rename = "books50-l2-tbt")]
Books50Tbt,
#[serde(rename = "books-l2-tbt")]
BooksTbt,
#[serde(rename = "books-rpi")]
BooksRpi,
#[serde(rename = "bbo-tbt")]
BboTbt,
#[serde(rename = "opt-summary")]
OptionSummary,
#[serde(rename = "funding-rate")]
FundingRate,
#[serde(rename = "event-contract-markets")]
EventContractMarkets,
#[serde(rename = "index-tickers")]
IndexTickers,
#[serde(rename = "status")]
Status,
#[serde(rename = "account")]
Account,
#[serde(rename = "positions")]
Positions,
#[serde(rename = "orders")]
Orders,
#[serde(rename = "sprd-orders")]
SprdOrders,
#[serde(rename = "sprd-bbo-tbt")]
SprdBboTbt,
#[serde(rename = "sprd-books5")]
SprdBooks5,
#[serde(rename = "sprd-public-trades")]
SprdPublicTrades,
#[serde(rename = "fills")]
Fills,
#[serde(rename = "orders-algo")]
OrdersAlgo,
#[serde(rename = "algo-advance")]
AlgoAdvance,
#[serde(rename = "candle1s")]
Candle1Second,
#[serde(rename = "candle1m")]
Candle1Minute,
#[serde(rename = "candle3m")]
Candle3Minute,
#[serde(rename = "candle5m")]
Candle5Minute,
#[serde(rename = "candle15m")]
Candle15Minute,
#[serde(rename = "candle30m")]
Candle30Minute,
#[serde(rename = "candle1H")]
Candle1Hour,
#[serde(rename = "candle2H")]
Candle2Hour,
#[serde(rename = "candle4H")]
Candle4Hour,
#[serde(rename = "candle6H")]
Candle6Hour,
#[serde(rename = "candle12H")]
Candle12Hour,
#[serde(rename = "candle1D")]
Candle1Day,
#[serde(rename = "candle2D")]
Candle2Day,
#[serde(rename = "candle3D")]
Candle3Day,
#[serde(rename = "candle5D")]
Candle5Day,
#[serde(rename = "candle1W")]
Candle1Week,
#[serde(rename = "candle1M")]
Candle1Month,
#[serde(rename = "candle3M")]
Candle3Month,
#[serde(rename = "candle6M")]
Candle6Month,
#[serde(rename = "candle1Y")]
Candle1Year,
#[serde(rename = "mark-price-candle1s")]
MarkPriceCandle1Second,
#[serde(rename = "mark-price-candle1m")]
MarkPriceCandle1Minute,
#[serde(rename = "mark-price-candle3m")]
MarkPriceCandle3Minute,
#[serde(rename = "mark-price-candle5m")]
MarkPriceCandle5Minute,
#[serde(rename = "mark-price-candle15m")]
MarkPriceCandle15Minute,
#[serde(rename = "mark-price-candle30m")]
MarkPriceCandle30Minute,
#[serde(rename = "mark-price-candle1H")]
MarkPriceCandle1Hour,
#[serde(rename = "mark-price-candle2H")]
MarkPriceCandle2Hour,
#[serde(rename = "mark-price-candle4H")]
MarkPriceCandle4Hour,
#[serde(rename = "mark-price-candle6H")]
MarkPriceCandle6Hour,
#[serde(rename = "mark-price-candle12H")]
MarkPriceCandle12Hour,
#[serde(rename = "mark-price-candle1D")]
MarkPriceCandle1Day,
#[serde(rename = "mark-price-candle2D")]
MarkPriceCandle2Day,
#[serde(rename = "mark-price-candle3D")]
MarkPriceCandle3Day,
#[serde(rename = "mark-price-candle5D")]
MarkPriceCandle5Day,
#[serde(rename = "mark-price-candle1W")]
MarkPriceCandle1Week,
#[serde(rename = "mark-price-candle1M")]
MarkPriceCandle1Month,
#[serde(rename = "mark-price-candle3M")]
MarkPriceCandle3Month,
}
impl OKXWsChannel {
#[must_use]
pub const fn is_spread(&self) -> bool {
matches!(
self,
Self::SprdOrders | Self::SprdBboTbt | Self::SprdBooks5 | Self::SprdPublicTrades
)
}
}