PluginChain

Struct PluginChain 

Source
pub struct PluginChain<W: WasmDispatch = NoWasm> { /* private fields */ }
Expand description

The unified per-request plugin chain.

Built from a route’s plugin names + the gateway’s plugin configs + the native registry + a WASM dispatch adapter. Holds the native filter instances for this request and the names of the WASM plugins (the adapter owns the WASM instances). Dispatches each phase to the plugins in deterministic phase order, short-circuiting on LocalResponse/Error.

Implementations§

Source§

impl<W: WasmDispatch> PluginChain<W>

Source

pub fn new( plugin_names: &[String], configs: &HashMap<String, PluginConfig>, registry: &NativeRegistry, wasm: W, ) -> (Self, Vec<NativeCreateFailure>)

Build a chain for a route’s plugin names.

plugin_names is the route’s plugins list (declaration order). configs is the gateway’s top-level plugins list keyed by name. registry provides native filter factories. wasm is the per-request WASM dispatch adapter (use NoWasm for native-only chains).

Returns the chain and the list of native entries whose factory ERRORED (NativeCreateFailure) — fail-closed material (DW-157): the configured filter never runs, so the caller must answer the request with the fail-closed 500 rather than proceed without it; the chain deliberately does NOT silently skip a reported entry. A plugin name that is neither a native filter in the registry nor a WASM plugin in configs is silently skipped (it was already flagged by validation as an unknown reference, and the dataplane’s health gate fails closed on it before the chain is built).

Source

pub fn is_empty(&self) -> bool

Whether the chain has any plugins at all.

Source

pub fn has_phase(&self, phase: PluginPhase) -> bool

Whether at least one plugin declares the given phase. The dataplane uses this to decide whether a body phase requires buffering (DW-157): a route whose plugins declare no body phase keeps its zero-buffering streaming path.

Source

pub fn on_request_headers( &mut self, headers: Vec<(String, String)>, ) -> (ChainOutcome, Vec<(String, String)>)

Run the request_headers phase across all plugins in order. Returns the outcome and the (possibly modified) headers.

Source

pub fn resume_request_headers( &mut self, headers: Vec<(String, String)>, ) -> (ChainOutcome, Vec<(String, String)>)

Continue the request_headers phase AFTER the paused entry (DW-167): headers is the resumed plugin’s post-callout output. Plugins before (and including) the paused entry do not run again.

Source

pub fn on_request_body(&mut self, body: Vec<u8>) -> (ChainOutcome, Vec<u8>)

Run the request_body phase across all plugins in order. Returns the outcome and the (possibly modified) body.

Source

pub fn resume_request_body(&mut self, body: Vec<u8>) -> (ChainOutcome, Vec<u8>)

Continue the request_body phase AFTER the paused entry (DW-167): body is the resumed plugin’s post-callout output.

Source

pub fn on_response_headers( &mut self, headers: Vec<(String, String)>, ) -> (ChainOutcome, Vec<(String, String)>)

Run the response_headers phase across all plugins in order. Returns the outcome and the (possibly modified) headers.

Source

pub fn resume_response_headers( &mut self, headers: Vec<(String, String)>, ) -> (ChainOutcome, Vec<(String, String)>)

Continue the response_headers phase AFTER the paused entry (DW-167): headers is the resumed plugin’s post-callout output.

Source

pub fn on_response_body(&mut self, body: Vec<u8>) -> (ChainOutcome, Vec<u8>)

Run the response_body phase across all plugins in order. Returns the outcome and the (possibly modified) body.

Source

pub fn resume_response_body(&mut self, body: Vec<u8>) -> (ChainOutcome, Vec<u8>)

Continue the response_body phase AFTER the paused entry (DW-167): body is the resumed plugin’s post-callout output.

Source

pub fn on_done(&mut self)

Call on_done on the WASM adapter (the cleanup path). Native filters have no explicit done callback; they are dropped when the chain is dropped.

Source

pub fn wasm(&self) -> &W

Borrow the WASM adapter (for callers that need to drive it directly, e.g. to instantiate per-request WASM instances before the chain runs).

Source

pub fn wasm_mut(&mut self) -> &mut W

Mutably borrow the WASM adapter.

Auto Trait Implementations§

§

impl<W> Freeze for PluginChain<W>
where W: Freeze,

§

impl<W = NoWasm> !RefUnwindSafe for PluginChain<W>

§

impl<W> Send for PluginChain<W>
where W: Send,

§

impl<W> Sync for PluginChain<W>
where W: Sync,

§

impl<W> Unpin for PluginChain<W>
where W: Unpin,

§

impl<W = NoWasm> !UnwindSafe for PluginChain<W>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AnyExt for T
where T: Any + ?Sized,

§

fn downcast_ref<T>(this: &Self) -> Option<&T>
where T: Any,

Attempts to downcast this to T behind reference
§

fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>
where T: Any,

Attempts to downcast this to T behind mutable reference
§

fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Any,

Attempts to downcast this to T behind Rc pointer
§

fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Any,

Attempts to downcast this to T behind Arc pointer
§

fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Any,

Attempts to downcast this to T behind Box pointer
§

fn downcast_move<T>(this: Self) -> Option<T>
where T: Any, Self: Sized,

Attempts to downcast owned Self to T, useful only in generic context as a workaround for specialization
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T, X> CoerceTo<T> for X
where T: CoerceFrom<X> + ?Sized,

§

fn coerce_rc_to(self: Rc<X>) -> Rc<T>

§

fn coerce_box_to(self: Box<X>) -> Box<T>

§

fn coerce_ref_to(&self) -> &T

§

fn coerce_mut_to(&mut self) -> &mut T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ServiceExt for T

§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Apply a transformation to the response body. Read more
§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,