cdk_http_client/
request.rs1use serde::de::DeserializeOwned;
4use serde::Serialize;
5
6use crate::error::HttpError;
7use crate::response::{RawResponse, Response};
8
9#[derive(Debug)]
11pub struct RequestBuilder {
12 inner: reqwest::RequestBuilder,
13}
14
15impl RequestBuilder {
16 pub(crate) fn new(inner: reqwest::RequestBuilder) -> Self {
18 Self { inner }
19 }
20
21 pub fn header(self, key: impl AsRef<str>, value: impl AsRef<str>) -> Self {
23 Self {
24 inner: self.inner.header(key.as_ref(), value.as_ref()),
25 }
26 }
27
28 pub fn json<T: Serialize + ?Sized>(self, body: &T) -> Self {
30 Self {
31 inner: self.inner.json(body),
32 }
33 }
34
35 pub fn form<T: Serialize + ?Sized>(self, body: &T) -> Self {
37 Self {
38 inner: self.inner.form(body),
39 }
40 }
41
42 pub async fn send(self) -> Response<RawResponse> {
44 let response = self.inner.send().await?;
45 Ok(RawResponse::new(response))
46 }
47
48 pub async fn send_json<R: DeserializeOwned>(self) -> Response<R> {
50 let response = self.inner.send().await?;
51 let status = response.status();
52
53 if !status.is_success() {
54 let message = response.text().await.unwrap_or_default();
55 return Err(HttpError::Status {
56 status: status.as_u16(),
57 message,
58 });
59 }
60
61 response.json().await.map_err(HttpError::from)
62 }
63}