pub struct TrafficLabelPlugin {
rules: Vec<Rule>,
}Expand description
Applies the first matching rule’s action: header values and label values
are $var templates interpolated per request.
Fields§
§rules: Vec<Rule>Implementations§
Source§impl TrafficLabelPlugin
impl TrafficLabelPlugin
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. All expressions are validated here at config load.
Accepted keys:
rules(array, required, non-empty): evaluated in order; the first rule whosematchpasses applies one of its actions.match(array, optional): APISIX triple-array condition, rules AND-ed. Omit to match every request.actions(array of objects, required, non-empty): one entry is chosen by weighted round-robin. Each entry:set_headers(object{name: value}): request headers to set (replacing existing values); values support$varinterpolation.set_labels(object{key: value}, featherbit extension): written tocontext.messageaslabel.<key>; values support$varinterpolation.weight(integer >= 1, default1): selection weight.
type: traffic-label
config:
rules:
- match:
- ["arg_channel", "==", "beta"]
actions:
- set_headers:
x-server-id: beta
set_labels:
tier: "beta"
weight: 3
- set_headers:
x-server-id: stable
weight: 1Trait Implementations§
Source§impl Plugin for TrafficLabelPlugin
impl Plugin for TrafficLabelPlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Unique identifier for the plugin type (e.g., “proxy-rewrite”, “upstream”).
Source§fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Executes the plugin logic against the request/response context. Read more
Auto Trait Implementations§
impl Freeze for TrafficLabelPlugin
impl RefUnwindSafe for TrafficLabelPlugin
impl Send for TrafficLabelPlugin
impl Sync for TrafficLabelPlugin
impl Unpin for TrafficLabelPlugin
impl UnsafeUnpin for TrafficLabelPlugin
impl UnwindSafe for TrafficLabelPlugin
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