Skip to main content

nado_sdk/utils/
rest.rs

1use eyre::Result;
2use reqwest::{Client, RequestBuilder};
3use serde::de::DeserializeOwned;
4use serde::Serialize;
5
6use crate::utils::response::NadoRestResponse;
7
8#[derive(Clone)]
9pub struct RestClient {
10    client: Client,
11}
12
13impl Default for RestClient {
14    fn default() -> Self {
15        Self::new()
16    }
17}
18
19impl RestClient {
20    pub fn new() -> Self {
21        Self {
22            client: Client::new(),
23        }
24    }
25    pub async fn get_request<R: DeserializeOwned + Send>(&self, url: &str) -> Result<R> {
26        request(self.client.get(url)).await
27    }
28
29    pub async fn post_request<T: Serialize, R: DeserializeOwned + Send>(
30        &self,
31        url: &str,
32        payload: &T,
33    ) -> Result<R> {
34        request(self.client.post(url).json(payload)).await
35    }
36
37    pub async fn debug_request<T: Serialize>(&self, url: &str, payload: &T) -> Result<()> {
38        debug_request(self.client.post(url).json(payload)).await
39    }
40}
41
42async fn request<R: DeserializeOwned + Send>(request: RequestBuilder) -> Result<R> {
43    let response = request.send().await?;
44    let response_data: NadoRestResponse<R> = response.json().await?;
45    response_data.extract_response()
46}
47
48async fn debug_request(request: RequestBuilder) -> Result<()> {
49    let response = request.send().await?;
50    let response_data = response.text().await?;
51    println!("response_data: {response_data}");
52    Ok(())
53}