use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct OrderDto {
#[serde(rename = "id")]
pub id: uuid::Uuid,
#[serde(rename = "clientOrderId", skip_serializing_if = "Option::is_none")]
pub client_order_id: Option<String>,
#[serde(rename = "type")]
pub r#type: Type,
#[serde(rename = "availableQuantity")]
pub available_quantity: String,
#[serde(rename = "quantity")]
pub quantity: String,
#[serde(rename = "side")]
pub side: models::OrderSide,
#[serde(rename = "productId")]
pub product_id: uuid::Uuid,
#[serde(rename = "subaccountId")]
pub subaccount_id: uuid::Uuid,
#[serde(rename = "status")]
pub status: models::OrderStatus,
#[serde(rename = "reduceOnly")]
pub reduce_only: bool,
#[serde(rename = "close")]
pub close: bool,
#[serde(rename = "updatedAt")]
pub updated_at: f64,
#[serde(rename = "createdAt")]
pub created_at: f64,
#[serde(rename = "sender")]
pub sender: String,
#[serde(rename = "price")]
pub price: String,
#[serde(rename = "filled")]
pub filled: String,
#[serde(rename = "stopPrice")]
pub stop_price: String,
#[serde(rename = "stopType", skip_serializing_if = "Option::is_none")]
pub stop_type: Option<StopType>,
#[serde(rename = "stopPriceType", skip_serializing_if = "Option::is_none")]
pub stop_price_type: Option<StopPriceType>,
#[serde(rename = "timeInForce", skip_serializing_if = "Option::is_none")]
pub time_in_force: Option<TimeInForce>,
#[serde(rename = "expiresAt")]
pub expires_at: f64,
#[serde(rename = "postOnly", skip_serializing_if = "Option::is_none")]
pub post_only: Option<bool>,
#[serde(
rename = "groupContingencyType",
skip_serializing_if = "Option::is_none"
)]
pub group_contingency_type: Option<GroupContingencyType>,
#[serde(rename = "groupId", skip_serializing_if = "Option::is_none")]
pub group_id: Option<uuid::Uuid>,
}
impl OrderDto {
pub fn new(
id: uuid::Uuid,
r#type: Type,
available_quantity: String,
quantity: String,
side: models::OrderSide,
product_id: uuid::Uuid,
subaccount_id: uuid::Uuid,
status: models::OrderStatus,
reduce_only: bool,
close: bool,
updated_at: f64,
created_at: f64,
sender: String,
price: String,
filled: String,
stop_price: String,
expires_at: f64,
) -> OrderDto {
OrderDto {
id,
client_order_id: None,
r#type,
available_quantity,
quantity,
side,
product_id,
subaccount_id,
status,
reduce_only,
close,
updated_at,
created_at,
sender,
price,
filled,
stop_price,
stop_type: None,
stop_price_type: None,
time_in_force: None,
expires_at,
post_only: None,
group_contingency_type: None,
group_id: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "MARKET")]
Market,
#[serde(rename = "LIMIT")]
Limit,
}
impl Default for Type {
fn default() -> Type {
Self::Market
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum StopType {
#[serde(rename = "0")]
GAIN,
#[serde(rename = "1")]
LOSS,
}
impl Default for StopType {
fn default() -> StopType {
Self::GAIN
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum StopPriceType {
#[serde(rename = "0")]
LAST_PRICE,
#[serde(rename = "1")]
MARK_PRICE,
}
impl Default for StopPriceType {
fn default() -> StopPriceType {
Self::LAST_PRICE
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TimeInForce {
#[serde(rename = "GTD")]
Gtd,
#[serde(rename = "IOC")]
Ioc,
#[serde(rename = "FOK")]
Fok,
}
impl Default for TimeInForce {
fn default() -> TimeInForce {
Self::Gtd
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum GroupContingencyType {
#[serde(rename = "0")]
OTO,
#[serde(rename = "1")]
OCO,
}
impl Default for GroupContingencyType {
fn default() -> GroupContingencyType {
Self::OTO
}
}