Struct HtmlRewriteBody
pub struct HtmlRewriteBody<B, H> { /* private fields */ }html and http only.Expand description
A response body that feeds the inner body’s bytes through an
HtmlRewriter, emitting rewritten chunks as they become available.
Build it directly with new (rewriting) or
passthrough (forward unchanged), or let
HtmlRewriteLayer construct one per
response. Attach on_end to recover the handler (and
any state it accumulated) once the rewrite finishes.
Implementations§
§impl<B, H> HtmlRewriteBody<B, H>where
H: ElementContentHandler,
impl<B, H> HtmlRewriteBody<B, H>where
H: ElementContentHandler,
pub fn new(
inner: B,
selectors: &[Selector],
handler: H,
) -> HtmlRewriteBody<B, H>
pub fn new( inner: B, selectors: &[Selector], handler: H, ) -> HtmlRewriteBody<B, H>
Wraps inner, rewriting elements matching selectors with handler
(the selector index passed to the handler is the index into
selectors).
§impl<B, H> HtmlRewriteBody<B, H>
impl<B, H> HtmlRewriteBody<B, H>
pub fn passthrough(inner: B) -> HtmlRewriteBody<B, H>
pub fn passthrough(inner: B) -> HtmlRewriteBody<B, H>
Wraps inner without rewriting — frames pass through unchanged (their
data type normalized to Bytes).
Lets a layer keep one body type for responses it must not rewrite (e.g. a non-HTML content type).
pub fn on_end<F>(self, on_end: F) -> HtmlRewriteBody<B, H>
pub fn on_end<F>(self, on_end: F) -> HtmlRewriteBody<B, H>
Installs a completion hook, handed the finalized handler by value after the rewrite ends — for reading state it accumulated.
Fires once after HtmlRewriter::end on clean termination (inner EOF
or trailers); not on the error path, nor in
passthrough mode (no handler). A later call
replaces an earlier hook.
Trait Implementations§
§impl<B, H> Body for HtmlRewriteBody<B, H>
impl<B, H> Body for HtmlRewriteBody<B, H>
§fn poll_frame(
self: Pin<&mut HtmlRewriteBody<B, H>>,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Frame<<HtmlRewriteBody<B, H> as Body>::Data>, <HtmlRewriteBody<B, H> as Body>::Error>>>
fn poll_frame( self: Pin<&mut HtmlRewriteBody<B, H>>, cx: &mut Context<'_>, ) -> Poll<Option<Result<Frame<<HtmlRewriteBody<B, H> as Body>::Data>, <HtmlRewriteBody<B, H> as Body>::Error>>>
§fn is_end_stream(&self) -> bool
fn is_end_stream(&self) -> bool
true when the end of stream has been reached. Read moreimpl<'__pin, B, H> Unpin for HtmlRewriteBody<B, H>where
<PinnedFieldsOfHelperStruct<__Origin<'__pin, B, H>> as PinnedFieldsOfHelperTrait>::Actual: Unpin,
Auto Trait Implementations§
impl<B, H> !RefUnwindSafe for HtmlRewriteBody<B, H>
impl<B, H> !UnwindSafe for HtmlRewriteBody<B, H>
impl<B, H> Freeze for HtmlRewriteBody<B, H>
impl<B, H> Send for HtmlRewriteBody<B, H>
impl<B, H> Sync for HtmlRewriteBody<B, H>
impl<B, H> UnsafeUnpin for HtmlRewriteBody<B, H>where
B: UnsafeUnpin,
H: UnsafeUnpin,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<T> BodyExt for T
impl<T> BodyExt for T
§fn frame(&mut self) -> Frame<'_, Self> ⓘwhere
Self: Unpin,
fn frame(&mut self) -> Frame<'_, Self> ⓘwhere
Self: Unpin,
Frame, if any.§fn boxed_unsync(self) -> UnsyncBoxBody<Self::Data, Self::Error>
fn boxed_unsync(self) -> UnsyncBoxBody<Self::Data, Self::Error>
§fn collect(self) -> Collect<Self> ⓘwhere
Self: Sized,
fn collect(self) -> Collect<Self> ⓘwhere
Self: Sized,
Collected body which will collect all the DATA frames
and trailers.§fn with_trailers<F>(self, trailers: F) -> WithTrailers<Self, F>
fn with_trailers<F>(self, trailers: F) -> WithTrailers<Self, F>
§fn into_data_stream(self) -> BodyDataStream<Self>where
Self: Sized,
fn into_data_stream(self) -> BodyDataStream<Self>where
Self: Sized,
BodyDataStream.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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writer§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writer§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writer§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writer§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer