flagrant_client/
blocking.rs1use reqwest::blocking::Response;
2use serde::{de::DeserializeOwned, Serialize};
3
4#[derive(Debug)]
5pub struct HttpClient {
6 api_host: String,
7 client: reqwest::blocking::Client,
8}
9
10impl HttpClient {
11 pub fn new(api_host: String) -> HttpClient {
12 let client = reqwest::blocking::Client::new();
13 HttpClient { api_host, client }
14 }
15
16 pub fn get<T: DeserializeOwned>(&self, path: String) -> anyhow::Result<T> {
17 let result = reqwest::blocking::get(format!("{}{}", self.api_host, path));
18
19 match result {
20 Ok(response) if response.status().is_success() => Ok(response.json::<T>()?),
21 Ok(response) => Err(anyhow::anyhow!(response.text()?)),
22 Err(err) => Err(err.into()),
23 }
24 }
25
26 pub fn put<P: Serialize>(&self, path: String, payload: P) -> anyhow::Result<()> {
27 let result = self
28 .client
29 .put(format!("{}{}", self.api_host, path))
30 .json(&payload)
31 .send();
32
33 match result {
34 Ok(response) if response.status().is_success() => Ok(()),
35 Ok(response) => Err(anyhow::anyhow!(response.text()?)),
36 Err(err) => Err(err.into()),
37 }
38 }
39
40 pub fn post<P: Serialize, T: DeserializeOwned>(
41 &self,
42 path: String,
43 payload: P,
44 ) -> anyhow::Result<T> {
45 let result = self
46 .client
47 .post(format!("{}{}", self.api_host, path))
48 .json(&payload)
49 .send();
50
51 match result {
52 Ok(response) if response.status().is_success() => Ok(response.json::<T>()?),
53 Ok(response) => Err(anyhow::anyhow!(response.text()?)),
54 Err(err) => Err(err.into()),
55 }
56 }
57
58 pub fn delete(&self, path: String) -> anyhow::Result<Response> {
59 let result = self
60 .client
61 .delete(format!("{}{}", self.api_host, path))
62 .send();
63
64 match result {
65 Ok(response) if response.status().is_success() => Ok(response),
66 Ok(response) => Err(anyhow::anyhow!(response.text()?)),
67 Err(err) => Err(err.into()),
68 }
69 }
70}