use serde::{Deserialize, Serialize};
pub trait EnumToStrTrait {
fn as_str(&self) -> &'static str;
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InstrumentInfo {
#[serde(rename = "instType")]
pub inst_type: String,
#[serde(rename = "instId")]
pub inst_id: String,
#[serde(rename = "uly", skip_serializing_if = "Option::is_none")]
pub underlying: Option<String>,
#[serde(rename = "settleCcy", skip_serializing_if = "Option::is_none")]
pub settle_currency: Option<String>,
#[serde(rename = "ctVal", skip_serializing_if = "Option::is_none")]
pub contract_value: Option<String>,
#[serde(rename = "ctMult", skip_serializing_if = "Option::is_none")]
pub contract_multiplier: Option<String>,
#[serde(rename = "quoteCcy", skip_serializing_if = "Option::is_none")]
pub quote_currency: Option<String>,
#[serde(rename = "baseCcy", skip_serializing_if = "Option::is_none")]
pub base_currency: Option<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum Side {
#[serde(rename = "buy")]
Buy,
#[serde(rename = "sell")]
Sell,
}
impl EnumToStrTrait for Side {
fn as_str(&self) -> &'static str {
match self {
Side::Buy => "buy",
Side::Sell => "sell",
}
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum PositionSide {
#[serde(rename = "long")]
Long,
#[serde(rename = "short")]
Short,
#[serde(rename = "net")]
Net, }
impl EnumToStrTrait for PositionSide {
fn as_str(&self) -> &'static str {
match self {
PositionSide::Long => "long",
PositionSide::Short => "short",
PositionSide::Net => "net",
}
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum OrderType {
#[serde(rename = "market")]
Market,
#[serde(rename = "limit")]
Limit,
#[serde(rename = "post_only")]
PostOnly,
#[serde(rename = "fok")]
FillOrKill,
#[serde(rename = "ioc")]
ImmediateOrCancel,
#[serde(rename = "optimal_limit_ioc")]
OptimalLimitIoc,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum OrderState {
#[serde(rename = "canceled")]
Canceled,
#[serde(rename = "live")]
Live,
#[serde(rename = "partially_filled")]
PartiallyFilled,
#[serde(rename = "filled")]
Filled,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum MarginMode {
#[serde(rename = "isolated")]
Isolated,
#[serde(rename = "cross")]
Cross,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum InstrumentType {
#[serde(rename = "SPOT")]
Spot,
#[serde(rename = "MARGIN")]
Margin,
#[serde(rename = "SWAP")]
Swap,
#[serde(rename = "FUTURES")]
Futures,
#[serde(rename = "OPTION")]
Option,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginationInfo {
#[serde(rename = "after", skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(rename = "before", skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(rename = "limit", skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
}