openapi_rs/common/
request.rs

1use crate::common::define::BaseRequest;
2use anyhow::anyhow;
3use reqwest::{Client, Method, RequestBuilder};
4
5#[derive(Debug, Default)]
6pub struct HttpBuilder {
7    pub http_client: Client,
8    pub base_url: String,
9
10    pub base_request: BaseRequest,
11}
12
13impl HttpBuilder {
14    pub fn new() -> Self {
15        Default::default()
16    }
17
18    pub fn with_base_url(mut self, base_url: String) -> Self {
19        self.base_url = base_url;
20        self
21    }
22
23    pub fn with_base_request(mut self, base_request: BaseRequest) -> Self {
24        self.base_request = base_request;
25        self
26    }
27
28    pub fn builder(self) -> anyhow::Result<RequestBuilder> {
29        let url = format!(
30            "{}{}?{}",
31            self.base_url,
32            self.base_request.uri,
33            serde_urlencoded::to_string(&self.base_request.queries)?
34        );
35
36        let request_builder = match self.base_request.method {
37            Method::GET => self.http_client.get(&url),
38            Method::POST => self.http_client.post(&url),
39            Method::PATCH => self.http_client.patch(&url),
40            Method::PUT => self.http_client.put(&url),
41            Method::DELETE => self.http_client.delete(&url),
42            _ => Err(anyhow!("unsupported method"))?,
43        };
44
45        let mut request_builder = request_builder.headers(self.base_request.headers);
46        if let Some(stream) = self.base_request.stream {
47            request_builder = request_builder.body(reqwest::Body::wrap_stream(stream))
48        } else {
49            request_builder = request_builder.body(self.base_request.body)
50        };
51
52        Ok(request_builder)
53    }
54}