pub struct Client {
bearer_token: String,
http_client: reqwest::Client
}
impl Client {
pub fn new(bearer_token: &str) -> Self {
Self {
bearer_token: bearer_token.to_string(),
http_client: reqwest::Client::new()
}
}
pub async fn get_request(&self, url: &str, query: &[(String, String)]) -> anyhow::Result<serde_json::Value> {
let mut request = self.http_client
.get(url)
.bearer_auth(&self.bearer_token);
if !query.is_empty() {
request = request.query(&query);
}
let response = request.send().await?;
Self::handle_response(response).await
}
async fn handle_response(response: reqwest::Response) -> anyhow::Result<serde_json::Value> {
let status = response.status();
if !status.is_success() {
let text = response.text().await?;
anyhow::bail!("Response status: {}, text: {}", status, text);
}
let resp_body = response.json().await?;
Ok(resp_body)
}
}