openapi-rs 0.1.4

A type-safe Rust client library for building, signing, and sending API requests with minimal boilerplate
Documentation
use crate::common::define::BaseRequest;
use anyhow::anyhow;
use reqwest::{Client, Method, RequestBuilder};

#[derive(Debug, Default)]
pub struct HttpBuilder {
    pub http_client: Client,
    pub base_url: String,

    pub base_request: BaseRequest,
}

impl HttpBuilder {
    pub fn new() -> Self {
        Default::default()
    }

    pub fn with_base_url(mut self, base_url: String) -> Self {
        self.base_url = base_url;
        self
    }

    pub fn with_base_request(mut self, base_request: BaseRequest) -> Self {
        self.base_request = base_request;
        self
    }

    pub fn builder(self) -> anyhow::Result<RequestBuilder> {
        let url = format!(
            "{}{}?{}",
            self.base_url,
            self.base_request.uri,
            serde_urlencoded::to_string(&self.base_request.queries)?
        );

        let request_builder = match self.base_request.method {
            Method::GET => self.http_client.get(&url),
            Method::POST => self.http_client.post(&url),
            Method::PATCH => self.http_client.patch(&url),
            Method::PUT => self.http_client.put(&url),
            Method::DELETE => self.http_client.delete(&url),
            _ => Err(anyhow!("unsupported method"))?,
        };

        let mut request_builder = request_builder.headers(self.base_request.headers);
        if let Some(stream) = self.base_request.stream {
            request_builder = request_builder.body(reqwest::Body::wrap_stream(stream))
        } else {
            request_builder = request_builder.body(self.base_request.body)
        };

        Ok(request_builder)
    }
}