use crate::model::order::OrderType;
use crate::model::response::order::LinkedOrderType;
use crate::model::trigger::{Trigger, TriggerFillCondition};
use crate::model::types::TimeInForce;
use pretty_simple_display::{DebugPretty, DisplaySimple};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
pub struct OrderRequest {
pub order_id: Option<String>,
pub instrument_name: String,
pub amount: Option<f64>,
pub contracts: Option<f64>,
#[serde(rename = "type")]
pub type_: Option<OrderType>,
pub label: Option<String>,
pub price: Option<f64>,
pub time_in_force: Option<TimeInForce>,
pub display_amount: Option<f64>,
pub post_only: Option<bool>,
pub reject_post_only: Option<bool>,
pub reduce_only: Option<bool>,
pub trigger_price: Option<f64>,
pub trigger_offset: Option<f64>,
pub trigger: Option<Trigger>,
pub advanced: Option<AdvancedOrderType>,
pub mmp: Option<bool>,
pub valid_until: Option<i64>,
pub linked_order_type: Option<LinkedOrderType>,
pub trigger_fill_condition: Option<TriggerFillCondition>,
pub otoco_config: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum AdvancedOrderType {
Usd,
Implv,
}