pub struct ExitTransformerPlugin {
status_map: HashMap<u16, u16>,
body: Option<Template>,
always: bool,
}Expand description
Remaps Context.response.status_code via status_map and/or replaces
the body with an interpolated {{namespace.path}} (plus legacy $var)
template — but only when the response was generated by the gateway
(Context.errors non-empty), unless always is set. This plugin never
fails at execution time.
Fields§
§status_map: HashMap<u16, u16>§body: Option<Template>Body template: supports {{namespace.path}} references and legacy
$var interpolation (see Template::render_with_legacy).
always: boolImplementations§
Source§impl ExitTransformerPlugin
impl ExitTransformerPlugin
Sourcepub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
pub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
Builds the plugin from node config.
Accepted keys (all optional):
status_map(map of status → status, e.g."502": 503): when the response status matches a key, it is replaced by the value. Keys are strings (YAML/JSON object keys), values integers; both must be within 100-599.body(string): replacement body template. Supports{{namespace.path}}references plus legacy$var/${var}interpolation —$status(the status after remapping),$uri,$host,$http_<name>,$msg_<key>, and every other variable fromcrate::vars.always(bool, defaultfalse): apply to every response. When false, only responses generated by the gateway itself — heuristic:Context.errorsis non-empty — are transformed; clean upstream responses pass through untouched.
type: exit-transformer
config:
status_map:
"401": 403
"502": 503
body: '{"status": $status, "path": "$uri"}'Trait Implementations§
Source§impl Plugin for ExitTransformerPlugin
impl Plugin for ExitTransformerPlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Source§fn execute<'life0, 'async_trait>(
&'life0 self,
ctx: Context,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn execute<'life0, 'async_trait>(
&'life0 self,
ctx: Context,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Executes the plugin logic against the request/response context. Read more
Source§fn reads_response_body(&self) -> bool
fn reads_response_body(&self) -> bool
Whether this configured instance reads
context.response.body. Read moreSource§fn cache_target(&self) -> Option<CacheTarget>
fn cache_target(&self) -> Option<CacheTarget>
The cache backend this node writes to, if it is a
proxy-cache half. Read moreAuto Trait Implementations§
impl Freeze for ExitTransformerPlugin
impl RefUnwindSafe for ExitTransformerPlugin
impl Send for ExitTransformerPlugin
impl Sync for ExitTransformerPlugin
impl Unpin for ExitTransformerPlugin
impl UnsafeUnpin for ExitTransformerPlugin
impl UnwindSafe for ExitTransformerPlugin
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,
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
Mutably borrows from an owned value. Read more
§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>
Converts
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>
Converts
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