use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Order {
#[serde(rename = "order_index")]
pub order_index: i64,
#[serde(rename = "client_order_index")]
pub client_order_index: i64,
#[serde(rename = "order_id")]
pub order_id: String,
#[serde(rename = "client_order_id")]
pub client_order_id: String,
#[serde(rename = "market_index")]
pub market_index: i32,
#[serde(rename = "owner_account_index")]
pub owner_account_index: i64,
#[serde(rename = "initial_base_amount")]
pub initial_base_amount: String,
#[serde(rename = "price")]
pub price: String,
#[serde(rename = "nonce")]
pub nonce: i64,
#[serde(rename = "remaining_base_amount")]
pub remaining_base_amount: String,
#[serde(rename = "is_ask")]
pub is_ask: bool,
#[serde(rename = "base_size")]
pub base_size: i64,
#[serde(rename = "base_price")]
pub base_price: i32,
#[serde(rename = "filled_base_amount")]
pub filled_base_amount: String,
#[serde(rename = "filled_quote_amount")]
pub filled_quote_amount: String,
#[serde(rename = "side")]
pub side: String,
#[serde(rename = "type")]
pub r#type: Type,
#[serde(rename = "time_in_force")]
pub time_in_force: TimeInForce,
#[serde(rename = "reduce_only")]
pub reduce_only: bool,
#[serde(rename = "trigger_price")]
pub trigger_price: String,
#[serde(rename = "order_expiry")]
pub order_expiry: i64,
#[serde(rename = "status")]
pub status: Status,
#[serde(rename = "trigger_status")]
pub trigger_status: TriggerStatus,
#[serde(rename = "trigger_time")]
pub trigger_time: i64,
#[serde(rename = "parent_order_index")]
pub parent_order_index: i64,
#[serde(rename = "parent_order_id")]
pub parent_order_id: String,
#[serde(rename = "to_trigger_order_id_0")]
pub to_trigger_order_id_0: String,
#[serde(rename = "to_trigger_order_id_1")]
pub to_trigger_order_id_1: String,
#[serde(rename = "to_cancel_order_id_0")]
pub to_cancel_order_id_0: String,
#[serde(rename = "block_height")]
pub block_height: i64,
#[serde(rename = "timestamp")]
pub timestamp: i64,
}
impl Order {
pub fn new(
order_index: i64,
client_order_index: i64,
order_id: String,
client_order_id: String,
market_index: i32,
owner_account_index: i64,
initial_base_amount: String,
price: String,
nonce: i64,
remaining_base_amount: String,
is_ask: bool,
base_size: i64,
base_price: i32,
filled_base_amount: String,
filled_quote_amount: String,
side: String,
r#type: Type,
time_in_force: TimeInForce,
reduce_only: bool,
trigger_price: String,
order_expiry: i64,
status: Status,
trigger_status: TriggerStatus,
trigger_time: i64,
parent_order_index: i64,
parent_order_id: String,
to_trigger_order_id_0: String,
to_trigger_order_id_1: String,
to_cancel_order_id_0: String,
block_height: i64,
timestamp: i64,
) -> Order {
Order {
order_index,
client_order_index,
order_id,
client_order_id,
market_index,
owner_account_index,
initial_base_amount,
price,
nonce,
remaining_base_amount,
is_ask,
base_size,
base_price,
filled_base_amount,
filled_quote_amount,
side,
r#type,
time_in_force,
reduce_only,
trigger_price,
order_expiry,
status,
trigger_status,
trigger_time,
parent_order_index,
parent_order_id,
to_trigger_order_id_0,
to_trigger_order_id_1,
to_cancel_order_id_0,
block_height,
timestamp,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "limit")]
Limit,
#[serde(rename = "market")]
Market,
#[serde(rename = "stop-loss")]
StopLoss,
#[serde(rename = "stop-loss-limit")]
StopLossLimit,
#[serde(rename = "take-profit")]
TakeProfit,
#[serde(rename = "take-profit-limit")]
TakeProfitLimit,
#[serde(rename = "twap")]
Twap,
#[serde(rename = "twap-sub")]
TwapSub,
#[serde(rename = "liquidation")]
Liquidation,
}
impl Default for Type {
fn default() -> Type {
Self::Limit
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TimeInForce {
#[serde(rename = "good-till-time")]
GoodTillTime,
#[serde(rename = "immediate-or-cancel")]
ImmediateOrCancel,
#[serde(rename = "post-only")]
PostOnly,
#[serde(rename = "Unknown")]
Unknown,
}
impl Default for TimeInForce {
fn default() -> TimeInForce {
Self::GoodTillTime
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Status {
#[serde(rename = "in-progress")]
InProgress,
#[serde(rename = "pending")]
Pending,
#[serde(rename = "open")]
Open,
#[serde(rename = "filled")]
Filled,
#[serde(rename = "canceled")]
Canceled,
#[serde(rename = "canceled-post-only")]
CanceledPostOnly,
#[serde(rename = "canceled-reduce-only")]
CanceledReduceOnly,
#[serde(rename = "canceled-position-not-allowed")]
CanceledPositionNotAllowed,
#[serde(rename = "canceled-margin-not-allowed")]
CanceledMarginNotAllowed,
#[serde(rename = "canceled-too-much-slippage")]
CanceledTooMuchSlippage,
#[serde(rename = "canceled-not-enough-liquidity")]
CanceledNotEnoughLiquidity,
#[serde(rename = "canceled-self-trade")]
CanceledSelfTrade,
#[serde(rename = "canceled-expired")]
CanceledExpired,
#[serde(rename = "canceled-oco")]
CanceledOco,
#[serde(rename = "canceled-child")]
CanceledChild,
#[serde(rename = "canceled-liquidation")]
CanceledLiquidation,
}
impl Default for Status {
fn default() -> Status {
Self::InProgress
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TriggerStatus {
#[serde(rename = "na")]
Na,
#[serde(rename = "ready")]
Ready,
#[serde(rename = "mark-price")]
MarkPrice,
#[serde(rename = "twap")]
Twap,
#[serde(rename = "parent-order")]
ParentOrder,
}
impl Default for TriggerStatus {
fn default() -> TriggerStatus {
Self::Na
}
}