use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct SubmitOrderLimitDtoData {
#[serde(rename = "subaccount")]
pub subaccount: String,
#[serde(rename = "sender")]
pub sender: String,
#[serde(rename = "nonce")]
pub nonce: String,
#[serde(rename = "type")]
pub r#type: models::OrderType,
#[serde(rename = "quantity")]
pub quantity: String,
#[serde(rename = "side")]
pub side: models::OrderSide,
#[serde(rename = "onchainId")]
pub onchain_id: i32,
#[serde(rename = "engineType")]
pub engine_type: models::EngineType,
#[serde(rename = "clientOrderId", skip_serializing_if = "Option::is_none")]
pub client_order_id: Option<String>,
#[serde(rename = "reduceOnly", skip_serializing_if = "Option::is_none")]
pub reduce_only: Option<bool>,
#[serde(rename = "close", skip_serializing_if = "Option::is_none")]
pub close: Option<bool>,
#[serde(rename = "stopPrice", skip_serializing_if = "Option::is_none")]
pub stop_price: Option<String>,
#[serde(rename = "stopType", skip_serializing_if = "Option::is_none")]
pub stop_type: Option<StopType>,
#[serde(rename = "signedAt")]
pub signed_at: i64,
#[serde(rename = "expiresAt", skip_serializing_if = "Option::is_none")]
pub expires_at: Option<i64>,
#[serde(rename = "groupId", skip_serializing_if = "Option::is_none")]
pub group_id: Option<uuid::Uuid>,
#[serde(
rename = "groupContingencyType",
skip_serializing_if = "Option::is_none"
)]
pub group_contingency_type: Option<GroupContingencyType>,
#[serde(rename = "price")]
pub price: String,
#[serde(rename = "timeInForce")]
pub time_in_force: TimeInForce,
#[serde(rename = "postOnly")]
pub post_only: bool,
}
impl SubmitOrderLimitDtoData {
pub fn new(
subaccount: String,
sender: String,
nonce: String,
r#type: models::OrderType,
quantity: String,
side: models::OrderSide,
onchain_id: i32,
engine_type: models::EngineType,
signed_at: i64,
price: String,
time_in_force: TimeInForce,
post_only: bool,
) -> SubmitOrderLimitDtoData {
SubmitOrderLimitDtoData {
subaccount,
sender,
nonce,
r#type,
quantity,
side,
onchain_id,
engine_type,
client_order_id: None,
reduce_only: None,
close: None,
stop_price: None,
stop_type: None,
signed_at,
expires_at: None,
group_id: None,
group_contingency_type: None,
price,
time_in_force,
post_only,
}
}
}
#[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 GroupContingencyType {
#[serde(rename = "0")]
OTO,
#[serde(rename = "1")]
OCO,
}
impl Default for GroupContingencyType {
fn default() -> GroupContingencyType {
Self::OTO
}
}
#[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
}
}