use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum SymbolStatus {
Trading,
EndOfDay,
Halt,
Break,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderStatus {
New,
PendingNew,
PartiallyFilled,
Filled,
Canceled,
PendingCancel,
Rejected,
Expired,
ExpiredInMatch,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderListStatus {
Response,
ExecStarted,
Updated,
AllDone,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderListOrderStatus {
Executing,
AllDone,
Reject,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum ContingencyType {
OCO,
OTO,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum AllocationType {
SOR,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum OrderType {
Limit,
Market,
StopLoss,
StopLossLimit,
TakeProfit,
TakeProfitLimit,
LimitMaker,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum OrderResponseType {
ACK,
RESULT,
FULL,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum WorkingFloor {
EXCHANGE,
SOR,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum OrderSide {
BUY,
SELL,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
pub enum TimeInForce {
GTC,
IOC,
FOK,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum RateLimiter {
RequestWeight,
Orders,
RawRequests,
}
#[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 = "1s")]
Second1,
#[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::Second1 => "1s",
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}")
}
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum STPMode {
None,
ExpireMaker,
ExpireTaker,
ExpireBoth,
Decrement,
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum SecurityType {
None,
Trade,
UserData,
UserStream,
}
#[derive(Debug, Deserialize, PartialEq)]
#[serde(tag = "filterType", rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ExchangeFilter {
PriceFilter { tick_size: Decimal },
LotSize { step_size: Decimal },
}
#[derive(Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum AccountType {
Spot,
}