Skip to main content

dhan_rs/api/
statements.rs

1//! Statement endpoints — Ledger Report, Trade History.
2
3use crate::client::{DhanClient, required_path_segment, required_query_value};
4use crate::error::Result;
5use crate::types::statements::*;
6
7impl DhanClient {
8    /// Retrieve Trading Account Ledger Report for a date range.
9    ///
10    /// Dates should be in `YYYY-MM-DD` format.
11    ///
12    /// **Endpoint:** `GET /v2/ledger?from-date={from}&to-date={to}`
13    pub async fn get_ledger_response(
14        &self,
15        from_date: &str,
16        to_date: &str,
17    ) -> Result<LedgerResponse> {
18        let from_date = required_query_value("from_date", from_date)?;
19        let to_date = required_query_value("to_date", to_date)?;
20        let path = format!("/v2/ledger?from-date={from_date}&to-date={to_date}");
21        self.get(&path).await
22    }
23
24    /// Retrieve ledger entries while preserving the pre-0.1.7 return type.
25    ///
26    /// New callers that need the documented client metadata should use
27    /// [`Self::get_ledger_response`].
28    pub async fn get_ledger(&self, from_date: &str, to_date: &str) -> Result<Vec<LedgerEntry>> {
29        Ok(self
30            .get_ledger_response(from_date, to_date)
31            .await?
32            .into_entries())
33    }
34
35    /// Retrieve historical trade data for a date range.
36    ///
37    /// Dates should be in `YYYY-MM-DD` format. Use `page = 0` as default.
38    /// The response is paginated.
39    ///
40    /// **Endpoint:** `GET /v2/trades/{from-date}/{to-date}/{page}`
41    pub async fn get_trade_history(
42        &self,
43        from_date: &str,
44        to_date: &str,
45        page: u32,
46    ) -> Result<Vec<TradeHistoryEntry>> {
47        let from_date = required_path_segment("from_date", from_date)?;
48        let to_date = required_path_segment("to_date", to_date)?;
49        let path = format!("/v2/trades/{from_date}/{to_date}/{page}");
50        self.get(&path).await
51    }
52}