bybit_async/rest/
trade.rs1use crate::models::order::{CancelOrderResponse, CanceledOrder, NewOrderResponse};
2use crate::models::{
3 NewOrderResponseType, OrderType, PositionSide, Product, Side, TimeInForce, WorkingType,
4};
5use crate::parser::string_or;
6use fehler::throw;
7use reqwest::Method;
8use rust_decimal::Decimal;
9use serde::{Deserialize, Deserializer};
10
11crate::define_request! {
12 Name => NewOrder;
13 Product => Product::UsdMFutures;
14 Method => Method::POST;
15 Endpoint => "/fapi/v1/order";
16 Signed => true;
17 Request => {
18 pub symbol: String,
19 pub side: Side,
20 pub position_side: Option<PositionSide>,
21 pub r#type: OrderType,
22 pub time_in_force: Option<TimeInForce>,
23 pub quantity: Option<Decimal>,
24 pub reduce_only: Option<bool>,
25 pub price: Option<Decimal>,
26 pub new_client_order_id: Option<String>,
27 pub stop_price: Option<Decimal>,
28 pub close_position: Option<bool>,
29 pub activation_price: Option<Decimal>,
30 pub callback_rate: Option<Decimal>,
31 pub working_type: Option<WorkingType>,
32 pub price_protect: Option<Decimal>,
33 pub new_order_resp_type: Option<NewOrderResponseType>,
34 };
35 Response => NewOrderResponse;
36}
37
38crate::define_request! {
39 Name => CancelOrder;
40 Product => Product::UsdMFutures;
41 Method => Method::DELETE;
42 Endpoint => "/fapi/v1/order";
43 Signed => true;
44 Request => {
45 pub symbol: String,
46 pub order_id: Option<u64>,
47 pub orig_client_order_id: Option<String>
48 };
49 Response => CancelOrderResponse;
50}
51
52crate::define_request! {
53 Name => CancelMultipleOrders;
54 Product => Product::UsdMFutures;
55 Method => Method::DELETE;
56 Endpoint => "/fapi/v1/batchOrders";
57 Signed => true;
58 Request => {
59 pub symbol: String,
60 pub order_id_list: Vec<u64>,
61 pub orig_client_order_id_list: Vec<String>,
62 };
63 Response => Vec<CanceledOrder>;
64}
65
66crate::define_request! {
67 Name => CancelAllOpenOrders;
68 Product => Product::UsdMFutures;
69 Method => Method::DELETE;
70 Endpoint => "/fapi/v1/allOpenOrders";
71 Signed => true;
72 Request => {
73 pub symbol: String,
74 };
75 Response => CancelAllOpenOrdersResponse;
76}
77
78#[derive(Deserialize, Debug, Clone)]
79pub struct CancelAllOpenOrdersResponse {
80 #[serde(deserialize_with = "check")]
81 pub code: u64,
82 pub msg: String,
83}
84
85pub fn check<'de, D>(d: D) -> Result<u64, D::Error>
86where
87 D: Deserializer<'de>,
88{
89 let v = u64::deserialize(d)?;
90 if v != 200 {
91 throw!(serde::de::Error::custom("not success code"))
92 }
93 Ok(v)
94}
95
96crate::define_request! {
97 Name => AutoCancelAllOpenOrders;
98 Product => Product::UsdMFutures;
99 Method => Method::POST;
100 Endpoint => "/fapi/v1/countdownCancelAll";
101 Signed => true;
102 Request => {
103 pub symbol: String,
104 pub countdown_time: u64,
105 };
106 Response => {
107 pub symbol: String,
108 #[serde(with="string_or")]
109 pub countdown_time: u64,
110 };
111}