pub struct RequestBuilder<'a, P: Phase = Query> { /* private fields */ }Expand description
Typestate request builder. Writes directly into a RequestWriter’s
buffer — no intermediate storage, no stream type parameter.
Phase type parameter enforces correct wire ordering at compile time: query parameters before headers, headers before body.
Implementations§
Source§impl<'a> RequestBuilder<'a, Query>
impl<'a> RequestBuilder<'a, Query>
Sourcepub fn query(self, key: &str, value: &str) -> Self
pub fn query(self, key: &str, value: &str) -> Self
Add a query parameter. Percent-encodes key and value per RFC 3986.
Sourcepub fn query_raw(self, key: &str, value: &str) -> Self
pub fn query_raw(self, key: &str, value: &str) -> Self
Add a pre-encoded query parameter. No percent-encoding applied.
Caller is responsible for correct encoding. Validates no CR/LF.
Sourcepub fn header(self, name: &str, value: &str) -> RequestBuilder<'a, Headers>
pub fn header(self, name: &str, value: &str) -> RequestBuilder<'a, Headers>
Add a request header. Transitions to the headers phase.
Sourcepub fn body(self, body: &[u8]) -> RequestBuilder<'a, Ready>
pub fn body(self, body: &[u8]) -> RequestBuilder<'a, Ready>
Set the request body. Transitions to the ready phase.
Sourcepub fn body_writer<F, E>(self, f: F) -> RequestBuilder<'a, Ready>
pub fn body_writer<F, E>(self, f: F) -> RequestBuilder<'a, Ready>
Write the body directly into the buffer via a closure.
Zero-alloc: the closure writes into the WriteBuf’s spare region
via BodyWriter (implements std::io::Write). Content-Length
is computed and backfilled automatically.
let req = writer.post("/order")
.body_writer(|w| serde_json::to_writer(w, &order))
.finish()?;Sourcepub fn body_fixed(
self,
len: usize,
f: impl FnOnce(&mut [u8]),
) -> RequestBuilder<'a, Ready>
pub fn body_fixed( self, len: usize, f: impl FnOnce(&mut [u8]), ) -> RequestBuilder<'a, Ready>
Write a fixed-size body via closure with direct &mut [u8] access.
The caller specifies the exact body size upfront. Content-Length
is written with exact digits (no backfill). The closure receives
a zeroed &mut [u8] slice of exactly len bytes to write into.
For binary wire formats (SBE, FIX, protobuf) where the message size is known at construction time.
let req = writer.post("/order")
.body_fixed(128, |buf| {
order.encode_sbe(buf);
})
.finish()?;Source§impl<'a> RequestBuilder<'a, Headers>
impl<'a> RequestBuilder<'a, Headers>
Sourcepub fn body(self, body: &[u8]) -> RequestBuilder<'a, Ready>
pub fn body(self, body: &[u8]) -> RequestBuilder<'a, Ready>
Set the request body. Transitions to the ready phase.
Sourcepub fn body_writer<F, E>(self, f: F) -> RequestBuilder<'a, Ready>
pub fn body_writer<F, E>(self, f: F) -> RequestBuilder<'a, Ready>
Write the body directly into the buffer via a closure.
Same as RequestBuilder<Query>::body_writer — see its docs.
Sourcepub fn body_fixed(
self,
len: usize,
f: impl FnOnce(&mut [u8]),
) -> RequestBuilder<'a, Ready>
pub fn body_fixed( self, len: usize, f: impl FnOnce(&mut [u8]), ) -> RequestBuilder<'a, Ready>
Write a fixed-size body via closure with direct &mut [u8] access.
Same as RequestBuilder<Query>::body_fixed — see its docs.