Skip to main content

arweave_rs/
client.rs

1// Mostly duplicated pretend_reqwest, because pretend_reqwest causes
2// request to pull defeault features that forces us to pull openssl
3// and we want to use rustls-tls instead of native-tls.
4
5use std::mem;
6
7use async_trait::async_trait;
8use pretend::{client::Bytes, Error, HeaderMap, Response, Result};
9use reqwest::Method;
10use url::Url;
11
12#[derive(Default)]
13pub struct Client(reqwest::Client);
14
15#[async_trait]
16impl pretend::client::Client for Client {
17    async fn execute(
18        &self,
19        method: Method,
20        url: Url,
21        headers: HeaderMap,
22        body: Option<Bytes>,
23    ) -> Result<Response<Bytes>> {
24        let mut builder = self.0.request(method, url).headers(headers);
25        if let Some(body) = body {
26            builder = builder.body(body);
27        }
28        let response = builder.send().await;
29        let mut response = response.map_err(Error::response)?;
30
31        let status = response.status();
32        let headers = mem::take(response.headers_mut());
33
34        let bytes = response.bytes().await;
35        let bytes = bytes.map_err(Error::body)?;
36
37        Ok(Response::new(status, headers, bytes))
38    }
39}