use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum OrderSide {
BUY,
SELL,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "UPPERCASE")]
pub enum PositionSide {
Both,
Long,
Short,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderType {
Limit,
Market,
Stop,
StopMarket,
TakeProfit,
TakeProfitMarket,
TrailingStopMarket,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum TimeInForce {
GTC,
IOC,
FOK,
GTX,
GTD,
}
#[derive(Debug, Deserialize, Serialize, PartialEq, Clone, Copy)]
pub enum PriceMatch {
#[serde(rename = "NONE")]
None,
#[serde(rename = "OPPONENT")]
Opponent,
#[serde(rename = "OPPONENT_5")]
Opponent5,
#[serde(rename = "OPPONENT_10")]
Opponent10,
#[serde(rename = "OPPONENT_20")]
Opponent20,
#[serde(rename = "QUEUE")]
Queue,
#[serde(rename = "QUEUE_5")]
Queue5,
#[serde(rename = "QUEUE_10")]
Queue10,
#[serde(rename = "QUEUE_20")]
Queue20,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderStatus {
New,
PartiallyFilled,
Filled,
Canceled,
Rejected,
Expired,
ExpiredInMatch,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum OrderResponseType {
ACK,
RESULT,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum WorkingType {
MarkPrice,
ContractPrice,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum MarginType {
Isolated,
Crossed,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ContractType {
Perpetual,
CurrentMonth,
NextMonth,
CurrentQuarter,
NextQuarter,
PerpetualDelivering,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum SymbolStatus {
PendingTrading,
Trading,
PreDelivering,
Delivering,
Delivered,
PreSettle,
Settling,
Close,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum STPMode {
None,
ExpireTaker,
ExpireMaker,
ExpireBoth,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum RateLimiter {
RequestWeight,
Orders,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum RateLimitInterval {
Second,
Minute,
Day,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub enum KlineInterval {
#[serde(rename = "1m")]
Minute1,
#[serde(rename = "3m")]
Minute3,
#[serde(rename = "5m")]
Minute5,
#[serde(rename = "15m")]
Minute15,
#[serde(rename = "30m")]
Minute30,
#[serde(rename = "1h")]
Hour1,
#[serde(rename = "2h")]
Hour2,
#[serde(rename = "4h")]
Hour4,
#[serde(rename = "6h")]
Hour6,
#[serde(rename = "8h")]
Hour8,
#[serde(rename = "12h")]
Hour12,
#[serde(rename = "1d")]
Day1,
#[serde(rename = "3d")]
Day3,
#[serde(rename = "1w")]
Week1,
#[serde(rename = "1M")]
Month1,
}
impl std::fmt::Display for KlineInterval {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let value = match self {
Self::Minute1 => "1m",
Self::Minute3 => "3m",
Self::Minute5 => "5m",
Self::Minute15 => "15m",
Self::Minute30 => "30m",
Self::Hour1 => "1h",
Self::Hour2 => "2h",
Self::Hour4 => "4h",
Self::Hour6 => "6h",
Self::Hour8 => "8h",
Self::Hour12 => "12h",
Self::Day1 => "1d",
Self::Day3 => "3d",
Self::Week1 => "1w",
Self::Month1 => "1M",
};
write!(f, "{value}")
}
}