Skip to main content

agentkit_http/
reqwest_impl.rs

1use async_trait::async_trait;
2use futures_util::TryStreamExt;
3
4use crate::{HttpClient, HttpError, HttpRequest, HttpResponse};
5
6#[async_trait]
7impl HttpClient for reqwest::Client {
8    async fn execute(&self, request: HttpRequest) -> Result<HttpResponse, HttpError> {
9        let HttpRequest {
10            method,
11            url,
12            headers,
13            body,
14        } = request;
15
16        let mut builder = self.request(method, &url).headers(headers);
17        if let Some(body) = body {
18            builder = builder.body(body);
19        }
20
21        let response = builder.send().await.map_err(HttpError::request)?;
22
23        let status = response.status();
24        let headers = response.headers().clone();
25        let final_url = response.url().to_string();
26        let body = Box::pin(response.bytes_stream().map_err(HttpError::body));
27
28        Ok(HttpResponse::new(status, headers, final_url, body))
29    }
30}