Skip to main content

dhan_rs/api/
forever_order.rs

1//! Forever Order endpoints.
2
3use crate::client::{DhanClient, required_path_segment};
4use crate::error::Result;
5use crate::types::forever_order::*;
6use crate::types::orders::OrderResponse;
7
8impl DhanClient {
9    /// Create a new forever order.
10    ///
11    /// **Endpoint:** `POST /v2/forever/orders`
12    pub async fn create_forever_order(
13        &self,
14        req: &CreateForeverOrderRequest,
15    ) -> Result<OrderResponse> {
16        self.post("/v2/forever/orders", req).await
17    }
18
19    /// Modify an existing forever order.
20    ///
21    /// **Endpoint:** `PUT /v2/forever/orders/{order-id}`
22    pub async fn modify_forever_order(
23        &self,
24        order_id: &str,
25        req: &ModifyForeverOrderRequest,
26    ) -> Result<OrderResponse> {
27        let order_id = required_path_segment("order_id", order_id)?;
28        self.put(&format!("/v2/forever/orders/{order_id}"), req)
29            .await
30    }
31
32    /// Delete a pending forever order.
33    ///
34    /// **Endpoint:** `DELETE /v2/forever/orders/{order-id}`
35    pub async fn delete_forever_order(&self, order_id: &str) -> Result<OrderResponse> {
36        let order_id = required_path_segment("order_id", order_id)?;
37        self.delete(&format!("/v2/forever/orders/{order_id}")).await
38    }
39
40    /// Retrieve all existing forever orders.
41    ///
42    /// **Endpoint:** `GET /v2/forever/all`
43    pub async fn get_all_forever_orders(&self) -> Result<Vec<ForeverOrderDetail>> {
44        self.get("/v2/forever/all").await
45    }
46
47    /// Retrieve all forever orders using the route in Dhan's linked OpenAPI.
48    ///
49    /// Dhan's HTML endpoint example currently uses `/v2/forever/all`, exposed
50    /// by [`Self::get_all_forever_orders`], while its summary and linked
51    /// OpenAPI use this `/v2/forever/orders` route. Both are explicit so the
52    /// caller can select the contract available to its account/environment.
53    ///
54    /// **Endpoint:** `GET /v2/forever/orders`
55    pub async fn get_all_forever_orders_openapi(&self) -> Result<Vec<ForeverOrderDetail>> {
56        self.get("/v2/forever/orders").await
57    }
58}