bybit_rust_api/rest/order/dto/
place_order.rs1use 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}