pub struct OasValidatorPlugin {
operations: Vec<CompiledOp>,
rejected_code: u16,
rejected_msg: Option<Template>,
}Expand description
Validates requests against a compiled OpenAPI 3 spec.
Fields§
§operations: Vec<CompiledOp>§rejected_code: u16§rejected_msg: Option<Template>Fixed message returned instead of the per-violation detail. Supports
{{namespace.path}} references (no legacy $var interpolation —
this field never supported it, so this sweep must not start).
Implementations§
Source§impl OasValidatorPlugin
impl OasValidatorPlugin
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:
spec(object, required): the OpenAPI 3 document as an inline JSON object. Itspathsare walked and every operation’sapplication/jsonrequestBody schema is compiled and required parameters indexed. A non-objectspec, a malformedpaths, or an uncompilable schema fails here at config load.rejected_code(integer 400–599, default400): response status for rejected requests.rejected_msg(string): fixed message returned instead of the per-violation detail. Supports{{namespace.path}}references.
type: oas-validator
config:
rejected_code: 400
spec:
openapi: 3.0.0
info: { title: demo, version: "1.0" }
paths:
/users/{id}:
get:
parameters:
- { name: verbose, in: query, required: true, schema: { type: string } }
post:
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [name]
properties: { name: { type: string } }Sourcefn match_operation(&self, method: &str, path: &str) -> Option<&CompiledOp>
fn match_operation(&self, method: &str, path: &str) -> Option<&CompiledOp>
Finds the best-matching operation for a method + path: the matching operation with the most literal (non-templated) segments wins, so an exact path is preferred over a templated one.
Sourcefn reject(
&self,
ctx: Context,
detail: String,
) -> Result<PluginOutput, PluginExecutionError>
fn reject( &self, ctx: Context, detail: String, ) -> Result<PluginOutput, PluginExecutionError>
Writes the rejection onto the response and routes the context through
the node’s denied port.
Trait Implementations§
Source§impl Plugin for OasValidatorPlugin
impl Plugin for OasValidatorPlugin
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 !RefUnwindSafe for OasValidatorPlugin
impl !UnwindSafe for OasValidatorPlugin
impl Freeze for OasValidatorPlugin
impl Send for OasValidatorPlugin
impl Sync for OasValidatorPlugin
impl Unpin for OasValidatorPlugin
impl UnsafeUnpin for OasValidatorPlugin
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