Skip to main content

rust_okx/ws/ops/
spread.rs

1//! Spread Trading WebSocket trade operations.
2
3use crate::Error;
4use crate::ws::client::{OkxWs, WsChannelGroup};
5use crate::ws::conn::WsConnector;
6use crate::ws::request::{
7    AmendSpreadOrderRequest, CancelSpreadOrderRequest, MassCancelSpreadOrdersRequest,
8    PlaceSpreadOrderRequest,
9};
10
11impl<C: WsConnector> OkxWs<C> {
12    /// Send `sprd-order` to place a spread order over the business WebSocket.
13    ///
14    /// OKX docs: <https://www.okx.com/docs-v5/en/#spread-trading-websocket-trade-api-ws-place-order>
15    pub async fn place_spread_order_ws(
16        &mut self,
17        id: impl Into<String>,
18        request: &PlaceSpreadOrderRequest,
19    ) -> Result<(), Error> {
20        self.require_channel_group(WsChannelGroup::Business, "sprd-order")?;
21        self.require_credentials("sprd-order")?;
22        self.send_request_with_expiry(id, "sprd-order", None, std::slice::from_ref(request))
23            .await
24    }
25
26    /// Send `sprd-amend-order` to amend a spread order over the business WebSocket.
27    ///
28    /// OKX docs: <https://www.okx.com/docs-v5/en/#spread-trading-websocket-trade-api-ws-amend-order>
29    pub async fn amend_spread_order_ws(
30        &mut self,
31        id: impl Into<String>,
32        request: &AmendSpreadOrderRequest,
33    ) -> Result<(), Error> {
34        self.require_channel_group(WsChannelGroup::Business, "sprd-amend-order")?;
35        self.require_credentials("sprd-amend-order")?;
36        self.send_request_with_expiry(id, "sprd-amend-order", None, std::slice::from_ref(request))
37            .await
38    }
39
40    /// Send `sprd-cancel-order` to cancel a spread order over the business WebSocket.
41    ///
42    /// OKX docs: <https://www.okx.com/docs-v5/en/#spread-trading-websocket-trade-api-ws-cancel-order>
43    pub async fn cancel_spread_order_ws(
44        &mut self,
45        id: impl Into<String>,
46        request: &CancelSpreadOrderRequest,
47    ) -> Result<(), Error> {
48        self.require_channel_group(WsChannelGroup::Business, "sprd-cancel-order")?;
49        self.require_credentials("sprd-cancel-order")?;
50        self.send_request_with_expiry(id, "sprd-cancel-order", None, std::slice::from_ref(request))
51            .await
52    }
53
54    /// Send `sprd-mass-cancel` to cancel spread orders over the business WebSocket.
55    ///
56    /// OKX docs: <https://www.okx.com/docs-v5/en/#spread-trading-websocket-trade-api-ws-cancel-all-orders>
57    pub async fn mass_cancel_spread_ws(
58        &mut self,
59        id: impl Into<String>,
60        request: &MassCancelSpreadOrdersRequest,
61    ) -> Result<(), Error> {
62        self.require_channel_group(WsChannelGroup::Business, "sprd-mass-cancel")?;
63        self.require_credentials("sprd-mass-cancel")?;
64        self.send_request_with_expiry(id, "sprd-mass-cancel", None, std::slice::from_ref(request))
65            .await
66    }
67}