use nautilus_model::enums::{AggressorSide, BookAction, OrderSide};
use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, EnumIter, EnumString};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum BitmexBookChannel {
OrderBookL2,
OrderBookL2_25,
OrderBook10,
}
#[derive(
Copy,
Clone,
Debug,
Display,
PartialEq,
Eq,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
pub enum BitmexSide {
Buy,
Sell,
}
impl BitmexSide {
#[must_use]
pub const fn as_order_side(&self) -> OrderSide {
match self {
Self::Buy => OrderSide::Buy,
Self::Sell => OrderSide::Sell,
}
}
#[must_use]
pub const fn as_aggressor_side(&self) -> AggressorSide {
match self {
Self::Buy => AggressorSide::Buyer,
Self::Sell => AggressorSide::Seller,
}
}
}
impl From<BitmexSide> for crate::common::enums::BitmexSide {
fn from(side: BitmexSide) -> Self {
match side {
BitmexSide::Buy => Self::Buy,
BitmexSide::Sell => Self::Sell,
}
}
}
#[derive(
Copy,
Clone,
Debug,
Display,
PartialEq,
Eq,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
pub enum BitmexTickDirection {
PlusTick,
MinusTick,
ZeroPlusTick,
ZeroMinusTick,
}
#[derive(
Copy,
Clone,
Debug,
Display,
PartialEq,
Eq,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
#[serde(rename_all = "lowercase")]
pub enum BitmexInstrumentState {
Open,
Closed,
Settling,
Unlisted,
}
#[derive(
Copy,
Clone,
Debug,
Display,
PartialEq,
Eq,
AsRefStr,
EnumIter,
EnumString,
Serialize,
Deserialize,
)]
#[serde(rename_all = "lowercase")]
pub enum BitmexAction {
Partial,
Insert,
Update,
Delete,
}
impl BitmexAction {
#[must_use]
pub const fn as_book_action(&self) -> BookAction {
match self {
Self::Partial => BookAction::Add,
Self::Insert => BookAction::Add,
Self::Update => BookAction::Update,
Self::Delete => BookAction::Delete,
}
}
}
#[derive(
Clone, Debug, Display, PartialEq, Eq, AsRefStr, EnumIter, EnumString, Serialize, Deserialize,
)]
#[serde(rename_all = "camelCase")]
pub enum BitmexWsOperation {
Subscribe,
Unsubscribe,
}
#[derive(
Clone, Debug, Display, PartialEq, Eq, AsRefStr, EnumIter, EnumString, Serialize, Deserialize,
)]
#[serde(rename_all = "camelCase")]
pub enum BitmexWsAuthAction {
AuthKey,
AuthKeyExpires,
CancelAllAfter,
}
#[derive(
Clone, Debug, Display, PartialEq, Eq, AsRefStr, EnumIter, EnumString, Serialize, Deserialize,
)]
#[serde(rename_all = "camelCase")]
#[strum(serialize_all = "camelCase")]
pub enum BitmexWsTopic {
Announcement,
Chat,
Connected,
Funding,
Instrument,
Insurance,
Liquidation,
Settlement,
OrderBookL2,
#[serde(rename = "orderBookL2_25")]
#[strum(to_string = "orderBookL2_25")]
OrderBookL2_25,
OrderBook10,
PublicNotifications,
Quote,
QuoteBin1m,
QuoteBin5m,
QuoteBin1h,
QuoteBin1d,
Trade,
TradeBin1m,
TradeBin5m,
TradeBin1h,
TradeBin1d,
}
#[derive(
Clone, Debug, Display, PartialEq, Eq, AsRefStr, EnumIter, EnumString, Serialize, Deserialize,
)]
#[serde(rename_all = "camelCase")]
#[strum(serialize_all = "camelCase")]
pub enum BitmexWsAuthChannel {
Order,
Execution,
Position,
Margin,
Wallet,
}