antelope/api/
default_provider.rs

1use 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}