Skip to main content

gateio_rs/api/spot/
cancel_batch_orders.rs

1use crate::http::{Credentials, Method, request::Request};
2use serde::Serialize;
3
4/// Single order cancellation parameters
5#[derive(Serialize)]
6pub struct CancelOrderRequest {
7    /// Order ID to cancel
8    pub id: String,
9    /// Trading pair
10    pub currency_pair: String,
11}
12
13/// Batch order cancellation request
14pub struct CancelBatchOrders {
15    /// Orders to cancel
16    pub orders: Vec<CancelOrderRequest>,
17    /// Request expiration time
18    pub x_gate_exp_time: Option<u128>,
19    /// API credentials
20    pub credentials: Option<Credentials>,
21}
22
23impl CancelBatchOrders {
24    /// Create batch cancellation request
25    pub fn new(orders: Vec<CancelOrderRequest>) -> Self {
26        Self {
27            orders,
28            x_gate_exp_time: None,
29            credentials: None,
30        }
31    }
32
33    /// Set expiration time
34    pub fn x_gate_exp_time(mut self, x_gate_exp_time: u128) -> Self {
35        self.x_gate_exp_time = Some(x_gate_exp_time);
36        self
37    }
38
39    /// Set API credentials
40    pub fn credentials(mut self, creds: Credentials) -> Self {
41        self.credentials = Some(creds);
42        self
43    }
44}
45
46impl From<CancelBatchOrders> for Request {
47    fn from(request: CancelBatchOrders) -> Request {
48        let params = Vec::new();
49        let payload = serde_json::to_string(&request.orders).unwrap();
50
51        Request {
52            method: Method::Post,
53            path: "/api/v4/spot/cancel_batch_orders".into(),
54            params,
55            payload,
56            x_gate_exp_time: request.x_gate_exp_time,
57            credentials: request.credentials,
58            sign: true,
59        }
60    }
61}