Skip to main content

dhan_rs/api/
orders.rs

1//! Order management endpoints.
2
3use crate::client::DhanClient;
4use crate::error::Result;
5use crate::types::orders::*;
6
7impl DhanClient {
8    /// Place a new order.
9    ///
10    /// **Endpoint:** `POST /v2/orders`
11    pub async fn place_order(&self, req: &PlaceOrderRequest) -> Result<OrderResponse> {
12        self.post("/v2/orders", req).await
13    }
14
15    /// Modify a pending order.
16    ///
17    /// **Endpoint:** `PUT /v2/orders/{order-id}`
18    pub async fn modify_order(
19        &self,
20        order_id: &str,
21        req: &ModifyOrderRequest,
22    ) -> Result<OrderResponse> {
23        self.put(&format!("/v2/orders/{order_id}"), req).await
24    }
25
26    /// Cancel a pending order.
27    ///
28    /// **Endpoint:** `DELETE /v2/orders/{order-id}`
29    pub async fn cancel_order(&self, order_id: &str) -> Result<OrderResponse> {
30        self.delete(&format!("/v2/orders/{order_id}")).await
31    }
32
33    /// Slice an order into multiple legs (for quantities over freeze limit).
34    ///
35    /// **Endpoint:** `POST /v2/orders/slicing`
36    pub async fn slice_order(&self, req: &PlaceOrderRequest) -> Result<Vec<OrderResponse>> {
37        self.post("/v2/orders/slicing", req).await
38    }
39
40    /// Retrieve all orders for the day.
41    ///
42    /// **Endpoint:** `GET /v2/orders`
43    pub async fn get_orders(&self) -> Result<Vec<OrderDetail>> {
44        self.get("/v2/orders").await
45    }
46
47    /// Retrieve a specific order by its ID.
48    ///
49    /// **Endpoint:** `GET /v2/orders/{order-id}`
50    pub async fn get_order(&self, order_id: &str) -> Result<OrderDetail> {
51        self.get(&format!("/v2/orders/{order_id}")).await
52    }
53
54    /// Retrieve an order by its correlation ID.
55    ///
56    /// **Endpoint:** `GET /v2/orders/external/{correlation-id}`
57    pub async fn get_order_by_correlation_id(&self, correlation_id: &str) -> Result<OrderDetail> {
58        self.get(&format!("/v2/orders/external/{correlation_id}"))
59            .await
60    }
61
62    /// Retrieve all trades for the day.
63    ///
64    /// **Endpoint:** `GET /v2/trades`
65    pub async fn get_trades(&self) -> Result<Vec<TradeDetail>> {
66        self.get("/v2/trades").await
67    }
68
69    /// Retrieve trades for a specific order.
70    ///
71    /// **Endpoint:** `GET /v2/trades/{order-id}`
72    pub async fn get_trades_for_order(&self, order_id: &str) -> Result<Vec<TradeDetail>> {
73        self.get(&format!("/v2/trades/{order_id}")).await
74    }
75}