Skip to main content

Module json_rewrite

Module json_rewrite 

Available on crate features http and std only.
Expand description

Middleware that rewrites JSON request or response bodies on the fly, using rama’s streaming JSON rewriter (rama_json::rewrite).

JsonRewriteLayer wraps a service and, for each response, checks the Content-Type: an application/json or application/*+json body (that is not content-encoded) is piped through a JsonRewriter as it streams, applying a handler to matched values; anything else is forwarded unchanged. Because rewriting changes the body length, the layer drops the now-stale Content-Length. Handlers can replace or remove scalar values as well as whole object/array subtrees.

JsonRequestRewriteLayer does the same for request bodies before the wrapped service sees the request.

The body adapter, JsonRewriteBody, is also usable on its own - e.g. composed with MapResponseBodyLayer or MapRequestBodyLayer - when you already handle the header concerns yourself.

§Handlers

The handler is any type implementing JsonValueHandler. The layer requires it to be Clone (it is cloned per body, so each request/response rewrites with fresh handler state) and Send. A plain data struct fits naturally, since the rewriter is owned and only touched through &mut self while the body is polled.

When the handler accumulates state, recover it once the body finishes via JsonRewriteBody::on_end.

§Encoding

The rewriter sees raw bytes, so a compressed (Content-Encoding) body is skipped. Place this layer after a decompression layer if you need to rewrite compressed requests or responses.

Structs§

JsonRequestRewrite
Rewrites JSON request bodies before they reach the underlying service, using rama’s streaming JsonRewriter.
JsonRequestRewriteLayer
Layer that applies JsonRequestRewrite to requests before they reach the wrapped service.
JsonRewrite
Rewrites JSON response bodies of the underlying service, using rama’s streaming JsonRewriter.
JsonRewriteBody
A body that feeds the inner body’s bytes through a JsonRewriter, emitting rewritten chunks as they become available.
JsonRewriteLayer
Layer that applies JsonRewrite to the responses of the wrapped service.