pub struct RouterRequest {
pub id: RequestId,
pub inner: McpRequest,
pub extensions: Extensions,
}Expand description
Request type for the tower Service implementation.
§Preserving extensions in middleware
When rewriting a request in middleware, use with_inner
or clone_with_inner instead of constructing a
new RouterRequest directly. Constructing with Extensions::new() will
silently drop extensions set by earlier middleware layers (token claims,
RBAC context, etc.).
// WRONG: drops extensions from earlier middleware
let rewritten = RouterRequest {
id: req.id.clone(),
inner: new_inner,
extensions: Extensions::new(),
};
// RIGHT: preserves extensions
let rewritten = req.with_inner(new_inner);Fields§
§id: RequestIdThe JSON-RPC request ID.
inner: McpRequestThe parsed MCP request.
extensions: ExtensionsType-map for passing data (e.g., TokenClaims) through middleware.
Implementations§
Source§impl RouterRequest
impl RouterRequest
Sourcepub fn new(id: RequestId, inner: McpRequest) -> Self
pub fn new(id: RequestId, inner: McpRequest) -> Self
Create a new RouterRequest with empty extensions.
Sourcepub fn with_inner(self, inner: McpRequest) -> Self
pub fn with_inner(self, inner: McpRequest) -> Self
Replace the inner MCP request, preserving the id and extensions.
This is the recommended way to rewrite requests in middleware, as it ensures extensions set by earlier middleware layers (e.g., token claims, RBAC context) are not lost.
Sourcepub fn with_id_and_inner(self, id: RequestId, inner: McpRequest) -> Self
pub fn with_id_and_inner(self, id: RequestId, inner: McpRequest) -> Self
Replace both the id and inner MCP request, preserving extensions.
Useful when middleware needs to assign a new request id (e.g., for fan-out or request duplication) while keeping the extensions from the original request.
Sourcepub fn clone_with_inner(&self, inner: McpRequest) -> Self
pub fn clone_with_inner(&self, inner: McpRequest) -> Self
Create a copy of this request with a different inner request, cloning the id and extensions from the original.
Unlike with_inner, this borrows self,
which is useful when the original request is still needed
(e.g., for traffic mirroring where you send the request to
two backends).
Trait Implementations§
Source§impl Clone for RouterRequest
impl Clone for RouterRequest
Source§fn clone(&self) -> RouterRequest
fn clone(&self) -> RouterRequest
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more