agentkit_http/
reqwest_impl.rs1use 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}