bybit_rust_api/rest/order/dto/
place_order.rs

1use crate::rest::enums::{
2    category::Category, order_type::OrderType, side::Side, smp_type::SmpType,
3    time_in_force::TimeInForce, trigger_by::TriggerBy,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Serialize, Deserialize, Default)]
8#[serde(rename_all = "camelCase")]
9pub struct PlaceOrderRequest {
10    pub category: Category,
11    pub symbol: String,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub is_leverage: Option<i32>,
14    pub side: Side,
15    pub order_type: OrderType,
16    pub qty: String,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub price: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub trigger_price: Option<String>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub trigger_direction: Option<i32>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub trigger_by: Option<TriggerBy>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub order_filter: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub order_iv: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub time_in_force: Option<TimeInForce>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub position_idx: Option<i32>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub order_link_id: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub take_profit: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub stop_loss: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub tp_trigger_by: Option<TriggerBy>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub sl_trigger_by: Option<TriggerBy>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub reduce_only: Option<bool>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub close_on_trigger: Option<bool>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub smp_type: Option<SmpType>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub mmp: Option<bool>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub tpsl_mode: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub tp_limit_price: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub sl_limit_price: Option<String>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub tp_order_type: Option<OrderType>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub sl_order_type: Option<OrderType>,
61}
62
63#[derive(Debug, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct PlaceOrderResponse {
66    pub order_id: String,
67    pub order_link_id: String,
68}
69
70#[derive(Debug, Serialize, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub struct BatchPlaceOrderResponse {
73    pub ret_code: i32,
74    pub ret_msg: String,
75    pub result: Vec<BatchOrderResult>,
76    pub ret_ext_info: BatchRetExtInfo,
77}
78
79#[derive(Debug, Serialize, Deserialize)]
80#[serde(rename_all = "camelCase")]
81pub struct BatchOrderResult {
82    pub category: Category,
83    pub symbol: String,
84    pub order_id: String,
85    pub order_link_id: String,
86    pub create_at: String,
87}
88
89#[derive(Debug, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct BatchRetExtInfo {
92    pub list: Vec<BatchOrderExtInfo>,
93}
94
95#[derive(Debug, Serialize, Deserialize)]
96#[serde(rename_all = "camelCase")]
97pub struct BatchOrderExtInfo {
98    pub code: i32,
99    pub msg: String,
100}