Skip to main content

rust_okx/ws/ops/
trade.rs

1//! Standard Trade WebSocket operations.
2
3use crate::Error;
4use crate::api::trade::{AmendOrderRequest, CancelOrderRequest, PlaceOrderRequest};
5use crate::ws::client::OkxWs;
6use crate::ws::conn::WsConnector;
7use crate::ws::request::MassCancelRequest;
8
9impl<C: WsConnector> OkxWs<C> {
10    /// Send `order` to place one order over WebSocket.
11    ///
12    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-place-order>
13    pub async fn place_order_ws(
14        &mut self,
15        id: impl Into<String>,
16        request: &PlaceOrderRequest<'_>,
17    ) -> Result<(), Error> {
18        self.send_request(id, "order", std::slice::from_ref(request))
19            .await
20    }
21
22    /// Send `batch-orders` to place multiple orders over WebSocket.
23    ///
24    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-place-multiple-orders>
25    pub async fn place_orders_ws(
26        &mut self,
27        id: impl Into<String>,
28        requests: &[PlaceOrderRequest<'_>],
29    ) -> Result<(), Error> {
30        self.send_request(id, "batch-orders", requests).await
31    }
32
33    /// Send `cancel-order` to cancel one order over WebSocket.
34    ///
35    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-cancel-order>
36    pub async fn cancel_order_ws(
37        &mut self,
38        id: impl Into<String>,
39        request: &CancelOrderRequest<'_>,
40    ) -> Result<(), Error> {
41        self.send_request(id, "cancel-order", std::slice::from_ref(request))
42            .await
43    }
44
45    /// Send `batch-cancel-orders` to cancel multiple orders over WebSocket.
46    ///
47    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-cancel-multiple-orders>
48    pub async fn cancel_orders_ws(
49        &mut self,
50        id: impl Into<String>,
51        requests: &[CancelOrderRequest<'_>],
52    ) -> Result<(), Error> {
53        self.send_request(id, "batch-cancel-orders", requests).await
54    }
55
56    /// Send `amend-order` to amend one order over WebSocket.
57    ///
58    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-amend-order>
59    pub async fn amend_order_ws(
60        &mut self,
61        id: impl Into<String>,
62        request: &AmendOrderRequest<'_>,
63    ) -> Result<(), Error> {
64        self.send_request(id, "amend-order", std::slice::from_ref(request))
65            .await
66    }
67
68    /// Send `batch-amend-orders` to amend multiple orders over WebSocket.
69    ///
70    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-amend-multiple-orders>
71    pub async fn amend_orders_ws(
72        &mut self,
73        id: impl Into<String>,
74        requests: &[AmendOrderRequest<'_>],
75    ) -> Result<(), Error> {
76        self.send_request(id, "batch-amend-orders", requests).await
77    }
78
79    /// Send `mass-cancel` to cancel market-maker-protection orders.
80    ///
81    /// OKX docs: <https://www.okx.com/docs-v5/en/#order-book-trading-trade-ws-mass-cancel-order>
82    pub async fn mass_cancel_ws(
83        &mut self,
84        id: impl Into<String>,
85        request: &MassCancelRequest,
86    ) -> Result<(), Error> {
87        self.send_request_with_expiry(id, "mass-cancel", None, std::slice::from_ref(request))
88            .await
89    }
90}