antelope/api/
default_provider.rs1use std::fmt::{Debug, Formatter};
2
3use reqwest::Client;
4
5use crate::api::client::Provider;
6
7#[derive(Default, Clone)]
8pub struct DefaultProvider {
9 base_url: String,
10 client: Client,
11}
12
13impl DefaultProvider {
14 pub fn new(base_url: String) -> Result<Self, String> {
15 let client = Client::builder().build();
16 if client.is_err() {
17 let err = client.err();
18 let mut err_message = String::from("Error building http client");
19 if err.is_some() {
20 err_message = err.unwrap().to_string();
21 }
22 return Err(err_message);
23 }
24
25 let url = base_url.trim_end_matches('/');
26
27 Ok(Self {
28 base_url: String::from(url),
29 client: client.unwrap(),
30 })
31 }
32}
33
34impl Debug for DefaultProvider {
35 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
36 write!(f, "DefaultProvider<{}>", self.base_url)
37 }
38}
39
40#[async_trait::async_trait]
41impl Provider for DefaultProvider {
42 async fn get(&self, path: String) -> Result<String, String> {
43 let res = self
44 .client
45 .get(self.base_url.to_string() + &path)
46 .send()
47 .await;
48 if res.is_err() {
49 return Err(res.err().unwrap().to_string());
50 }
51
52 Ok(res.unwrap().text().await.unwrap())
53 }
54
55 async fn post(&self, path: String, body: Option<String>) -> Result<String, String> {
56 let mut builder = self.client.post(self.base_url.to_string() + &path);
57 if body.is_some() {
58 builder = builder.body(body.unwrap());
59 }
60 let res = builder.send().await;
61 if res.is_err() {
62 return Err(res.err().unwrap().to_string());
63 }
64
65 Ok(res.unwrap().text().await.unwrap())
66 }
67}