Skip to main content

onspring/endpoints/
reports.rs

1use reqwest::Method;
2
3use crate::client::OnspringClient;
4use crate::error::Result;
5use crate::models::{
6  DataFormat, PagedResponse, PagingRequest, ReportData, ReportDataType, ReportInfo,
7};
8
9impl OnspringClient {
10  /// Gets report data by report ID.
11  pub async fn get_report(
12    &self,
13    report_id: i32,
14    data_format: Option<DataFormat>,
15    data_type: Option<ReportDataType>,
16  ) -> Result<ReportData> {
17    let path = format!("/Reports/id/{}", report_id);
18    let mut query = Vec::new();
19    if let Some(fmt) = data_format {
20      query.push(("apiDataFormat", format!("{:?}", fmt)));
21    }
22    if let Some(dt) = data_type {
23      query.push(("dataType", format!("{:?}", dt)));
24    }
25    let query_refs: Vec<(&str, String)> = query.iter().map(|(k, v)| (*k, v.clone())).collect();
26    self
27      .request(Method::GET, &path, &query_refs, Option::<&()>::None)
28      .await
29  }
30
31  /// Gets a paginated list of reports for a given application.
32  pub async fn list_reports(
33    &self,
34    app_id: i32,
35    paging: Option<PagingRequest>,
36  ) -> Result<PagedResponse<ReportInfo>> {
37    let path = format!("/Reports/appId/{}", app_id);
38    let mut query = Vec::new();
39    if let Some(p) = paging {
40      query.push(("PageNumber", p.page_number.to_string()));
41      query.push(("PageSize", p.page_size.to_string()));
42    }
43    let query_refs: Vec<(&str, String)> = query.iter().map(|(k, v)| (*k, v.clone())).collect();
44    self
45      .request(Method::GET, &path, &query_refs, Option::<&()>::None)
46      .await
47  }
48}