41 lines
984 B
Rust

use reqwest::Url;
use serde::Serialize;
#[derive(Clone)]
pub struct QueueHttpClient {
base_url: Url,
client: reqwest::Client,
}
impl QueueHttpClient {
#[must_use]
pub fn new(base_url: Url) -> Self {
Self {
base_url,
client: reqwest::Client::new(),
}
}
pub async fn get<T: serde::de::DeserializeOwned>(&self, path: &str) -> anyhow::Result<T> {
let url = self.base_url.join(path)?;
let response = self.client.get(url).send().await?.error_for_status()?;
Ok(response.json().await?)
}
pub async fn post<B: Serialize, T: serde::de::DeserializeOwned>(
&self,
path: &str,
body: &B,
) -> anyhow::Result<T> {
let url = self.base_url.join(path)?;
let response = self
.client
.post(url)
.json(body)
.send()
.await?
.error_for_status()?;
Ok(response.json().await?)
}
}