Skip to main content

dhan_rs/api/
conditional.rs

1//! Conditional Trigger endpoints.
2
3use crate::client::{DhanClient, required_path_segment};
4use crate::error::{DhanError, Result};
5use crate::types::conditional::*;
6
7impl DhanClient {
8    /// Place multiple orders without an alert condition.
9    ///
10    /// **Endpoint:** `POST /v2/alerts/multi/orders`
11    pub async fn place_multi_order(&self, req: &MultiOrderRequest) -> Result<MultiOrderResponse> {
12        req.validate()
13            .map_err(|message| DhanError::InvalidArgument(message.into()))?;
14        self.post("/v2/alerts/multi/orders", req).await
15    }
16
17    /// Place a new conditional trigger.
18    ///
19    /// **Endpoint:** `POST /v2/alerts/orders`
20    pub async fn place_conditional_trigger(
21        &self,
22        req: &ConditionalTriggerRequest,
23    ) -> Result<ConditionalTriggerResponse> {
24        self.post("/v2/alerts/orders", req).await
25    }
26
27    /// Modify an existing conditional trigger.
28    ///
29    /// **Endpoint:** `PUT /v2/alerts/orders/{alertId}`
30    pub async fn modify_conditional_trigger(
31        &self,
32        alert_id: &str,
33        req: &ConditionalTriggerRequest,
34    ) -> Result<ConditionalTriggerResponse> {
35        let alert_id = required_path_segment("alert_id", alert_id)?;
36        self.put(&format!("/v2/alerts/orders/{alert_id}"), req)
37            .await
38    }
39
40    /// Delete a conditional trigger.
41    ///
42    /// **Endpoint:** `DELETE /v2/alerts/orders/{alertId}`
43    pub async fn delete_conditional_trigger(
44        &self,
45        alert_id: &str,
46    ) -> Result<ConditionalTriggerResponse> {
47        let alert_id = required_path_segment("alert_id", alert_id)?;
48        self.delete(&format!("/v2/alerts/orders/{alert_id}")).await
49    }
50
51    /// Get a specific conditional trigger by its ID.
52    ///
53    /// **Endpoint:** `GET /v2/alerts/orders/{alertId}`
54    pub async fn get_conditional_trigger(
55        &self,
56        alert_id: &str,
57    ) -> Result<ConditionalTriggerDetail> {
58        let alert_id = required_path_segment("alert_id", alert_id)?;
59        self.get(&format!("/v2/alerts/orders/{alert_id}")).await
60    }
61
62    /// Get all conditional triggers.
63    ///
64    /// **Endpoint:** `GET /v2/alerts/orders`
65    pub async fn get_all_conditional_triggers(&self) -> Result<Vec<ConditionalTriggerDetail>> {
66        self.get("/v2/alerts/orders").await
67    }
68}