cod_client/general_requests/
get.rs

1use reqwest::Url;
2use serde::de::DeserializeOwned;
3use serde::Serialize;
4use std::fmt::Debug;
5use std::ops::Deref;
6
7use crate::CodebergClient;
8
9impl CodebergClient {
10    pub async fn get<T>(&self, api_endpoint: Url) -> anyhow::Result<T>
11    where
12        T: DeserializeOwned + Debug,
13    {
14        self.get_query::<[(); 0], T>(api_endpoint, []).await
15    }
16
17    pub async fn get_query<Q, T>(&self, api_endpoint: Url, query: Q) -> anyhow::Result<T>
18    where
19        Q: Serialize + Debug,
20        T: DeserializeOwned + Debug,
21    {
22        tracing::debug!("Query: {query:?}");
23        let request = self.deref().get(api_endpoint.clone()).query(&query);
24        tracing::debug!("Making GET call. Request: {:?}", request);
25        let response = request.send().await?;
26        tracing::debug!("Response Status: {:?}", response.status());
27        let json_response = response.json().await;
28        if json_response.is_err() {
29            let request = self.deref().get(api_endpoint).query(&query);
30            let response = request.send().await?;
31            tracing::debug!("======\n{}\n======", response.text().await?);
32        }
33        let json_response = json_response?;
34        tracing::debug!("Response: {:?}", json_response);
35        Ok(json_response)
36    }
37}