openapi_rs/common/
request.rs1use 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}