use crate::rest::enums::{
category::Category, order_type::OrderType, side::Side, smp_type::SmpType,
time_in_force::TimeInForce, trigger_by::TriggerBy,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct PlaceOrderRequest {
pub category: Category,
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_leverage: Option<i32>,
pub side: Side,
pub order_type: OrderType,
pub qty: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_direction: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_by: Option<TriggerBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_filter: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_iv: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_in_force: Option<TimeInForce>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub take_profit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_loss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_trigger_by: Option<TriggerBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_trigger_by: Option<TriggerBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reduce_only: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub close_on_trigger: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub smp_type: Option<SmpType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mmp: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tpsl_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_limit_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_limit_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_order_type: Option<OrderType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_order_type: Option<OrderType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlaceOrderResponse {
pub order_id: String,
pub order_link_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchPlaceOrderResponse {
pub ret_code: i32,
pub ret_msg: String,
pub result: Vec<BatchOrderResult>,
pub ret_ext_info: BatchRetExtInfo,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchOrderResult {
pub category: Category,
pub symbol: String,
pub order_id: String,
pub order_link_id: String,
pub create_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchRetExtInfo {
pub list: Vec<BatchOrderExtInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchOrderExtInfo {
pub code: i32,
pub msg: String,
}