#[non_exhaustive]pub struct UnaryRequest {
pub ctx: RequestContext,
pub payload: Payload,
}Expand description
A unary RPC request as seen by an Interceptor.
Carries the dispatch RequestContext (headers, deadline,
extensions, Spec, negotiated protocol) and the
lazily-decoded body. Both fields are public so an interceptor can
rewrite headers (ctx.headers_mut()),
inject extensions (ctx.extensions_mut()),
or replace the message (payload.set_message(..))
and pass the mutated request to Next::run.
ctx.spec() is Some(..) for generated FooServiceServer<T>
dispatchers and for Router routes registered
through the generated register(); it is None only for low-level
manual registrations without a
Router::with_spec call.
#[non_exhaustive] so future fields can be added without a
breaking change. Construct with UnaryRequest::new (from wire
bytes) or UnaryRequest::from_parts (from a Payload); copy for
a second attempt with UnaryRequest::try_clone; destructure with a
trailing ...
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.ctx: RequestContextThe dispatch context. Changes made through
headers_mut() or
extensions_mut() before
next.run propagate to the handler.
payload: PayloadThe lazily-decoded request body. Call
set_message to replace it.
Implementations§
Source§impl UnaryRequest
impl UnaryRequest
Sourcepub fn new(ctx: RequestContext, body: Bytes, format: CodecFormat) -> Self
pub fn new(ctx: RequestContext, body: Bytes, format: CodecFormat) -> Self
Build a UnaryRequest from a dispatch context and wire-encoded
body. Used by the dispatch path and by test fixtures.
Sourcepub fn from_parts(ctx: RequestContext, payload: Payload) -> Self
pub fn from_parts(ctx: RequestContext, payload: Payload) -> Self
Build a UnaryRequest from a context and an existing Payload
(the struct is #[non_exhaustive], so downstream code cannot use a
struct literal) — e.g. around a typed message with
Payload::from_message. Unlike new, does not apply
the context’s decode limits to the payload; use new for untrusted
wire bytes. For a retry copy, use try_clone,
which keeps the limits.
Sourcepub fn try_clone(&self) -> Result<Self, ConnectError>
pub fn try_clone(&self) -> Result<Self, ConnectError>
Copy this request for another trip through the chain: clones the
context and Payload::try_clones the body, so header edits on one
attempt do not leak into another. See Next for the retry shape.
§Errors
Returns an error if the payload holds a replacement that fails to encode.