pub struct RequestBuilder { /* private fields */ }Expand description
HTTP request builder with fluent API
Created by [HttpClient::get], [HttpClient::post], etc.
Supports chaining headers and body configuration before sending
with send().
§URL Construction
This crate does not provide query-string composition. Build your URL
externally (e.g. via url::Url) and pass the final string to HttpClient:
use url::Url;
use modkit_http::HttpClient;
let mut url = Url::parse("https://api.example.com/users")?;
url.query_pairs_mut()
.append_pair("page", "1")
.append_pair("limit", "10");
let client = HttpClient::builder().build()?;
let resp = client.get(url.as_str()).send().await?;§Example
use modkit_http::HttpClient;
let client = HttpClient::builder().build()?;
// Simple GET
let resp = client
.get("https://api.example.com/users")
.send()
.await?;
// POST with JSON body
let resp = client
.post("https://api.example.com/users")
.header("x-request-id", "123")
.json(&NewUser { name: "Alice" })?
.send()
.await?;
// POST with form body
let resp = client
.post("https://auth.example.com/token")
.header("authorization", "Basic xyz")
.form(&[("grant_type", "client_credentials")])?
.send()
.await?;Implementations§
Source§impl RequestBuilder
impl RequestBuilder
Sourcepub fn json<T: Serialize>(self, body: &T) -> Result<Self, HttpError>
pub fn json<T: Serialize>(self, body: &T) -> Result<Self, HttpError>
Set request body as JSON
Serializes the value using serde_json and sets Content-Type to application/json.
unless a Content-Type header was already provided.
§Errors
Returns Err(HttpError::Json) if serialization fails.
§Example
#[derive(Serialize)]
struct CreateUser { name: String }
let resp = client
.post("https://api.example.com/users")
.json(&CreateUser { name: "Alice".into() })?
.send()
.await?;Sourcepub fn form(self, fields: &[(&str, &str)]) -> Result<Self, HttpError>
pub fn form(self, fields: &[(&str, &str)]) -> Result<Self, HttpError>
Set request body as form URL-encoded
Serializes the fields and sets Content-Type to application/x-www-form-urlencoded. unless a Content-Type header was already provided.
§Errors
Returns Err(HttpError::FormEncode) if encoding fails.
§Example
let resp = client
.post("https://auth.example.com/token")
.form(&[
("grant_type", "client_credentials"),
("client_id", "my-app"),
])?
.send()
.await?;Sourcepub fn body_bytes(self, body: Bytes) -> Self
pub fn body_bytes(self, body: Bytes) -> Self
Sourcepub fn body_string(self, body: String) -> Self
pub fn body_string(self, body: String) -> Self
Sourcepub async fn send(self) -> Result<HttpResponse, HttpError>
pub async fn send(self) -> Result<HttpResponse, HttpError>
Send the request and return the response
§Errors
Returns HttpError if:
- Request building failed (invalid headers, URL, etc.)
- URL scheme is invalid for the transport security mode
- Network/transport error
- Request timeout
- Concurrency limit reached (
Overloaded)
§Example
let resp = client
.get("https://api.example.com/data")
.send()
.await?;
let data: MyData = resp.json().await?;Auto Trait Implementations§
impl !Freeze for RequestBuilder
impl !RefUnwindSafe for RequestBuilder
impl Send for RequestBuilder
impl Sync for RequestBuilder
impl Unpin for RequestBuilder
impl !UnwindSafe for RequestBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
Source§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
Source§fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
Source§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
x-request-id as the header name. Read moreSource§fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
Source§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
x-request-id as the header name. Read moreSource§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
413 Payload Too Large responses. Read more