1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// use std::collections::HashMap;
// // src/http.rs
// use reqwest::{Client, Method, Url, Response, Error as ReqwestError};
// use reqwest::header::HeaderMap;
// use serde::Serialize;
// use async_trait::async_trait;
//
// pub mod vercel;
// mod r#macro; // Assuming this submodule defines specific Vercel API requests
//
// /// Trait for defining properties of an API request.
// pub trait ApiRequest {
// fn endpoint(&self) -> String;
// fn method(&self) -> Method;
// fn headers(&self) -> HeaderMap; // Returns default headers necessary for the request
// fn body(&self) -> Option<String>;
// /// Query parameters
// fn query(&self) -> HashMap<String, String>;
// }
//
// /// Trait for sending API requests.
// #[async_trait]
// pub trait SendRequest: ApiRequest + Sized {
// async fn send(&self, client: &Client) -> Result<Response, ReqwestError> {
// let base_url = Url::parse(&self.endpoint())?;
// let url = base_url.join(&self.method().as_str())?;
// let mut request_builder = client.request(self.method(), url);
// request_builder = request_builder.headers(self.headers());
//
// // Apply query parameters
// let query_params = self.query();
// if !query_params.is_empty() {
// request_builder = request_builder.query(&query_params);
// }
//
// if let Some(body) = self.body() {
// request_builder = request_builder.body(body);
// }
//
// request_builder.send().await
// }
// }
//
// /// Builder for constructing API requests, allows adding or modifying headers.
// pub struct ApiRequestBuilder<T: ApiRequest> {
// inner: T,
// extra_headers: HeaderMap,
// }
//
// impl<T: ApiRequest> ApiRequestBuilder<T> {
// /// Creates a new ApiRequestBuilder with a given inner API request.
// pub fn new(inner: T) -> Self {
// ApiRequestBuilder { inner, extra_headers: HeaderMap::new() }
// }
//
// /// Adds or updates headers for the request.
// pub fn set_headers(mut self, headers: HeaderMap) -> Self {
// self.extra_headers.extend(headers);
// self
// }
//
// /// Builds the final API request, merging additional headers with those defined by the API request.
// pub fn build(self) -> T {
// let mut combined_headers = self.inner.headers();
// combined_headers.extend(self.extra_headers);
// // Here we assume that there is a method or logic within the `ApiRequest` to update headers.
// self.inner.update_headers(combined_headers); // This line assumes you add such a method to `ApiRequest`
// self.inner
// }
// }