Skip to main content

RequestValidator

Struct RequestValidator 

Source
pub struct RequestValidator { /* private fields */ }
Expand description

AST-based GraphQL request validator.

Uses graphql-parser to walk the full document tree. Correctly handles operation names, arguments, fragment spreads, inline fragments, and aliases — none of which a character-scan can distinguish from field names.

Implementations§

Source§

impl RequestValidator

Source

pub fn new() -> Self

Create a new validator with default settings.

Source

pub const fn from_config(config: &ComplexityConfig) -> Self

Create from a ComplexityConfig.

Source

pub const fn with_max_depth(self, max_depth: usize) -> Self

Set maximum query depth.

Source

pub const fn with_max_complexity(self, max_complexity: usize) -> Self

Set maximum query complexity.

Source

pub const fn with_depth_validation(self, enabled: bool) -> Self

Enable/disable depth validation.

Source

pub const fn with_complexity_validation(self, enabled: bool) -> Self

Enable/disable complexity validation.

Source

pub const fn with_max_aliases(self, max_aliases: usize) -> Self

Set maximum number of aliases per query.

Source

pub fn analyze( &self, query: &str, ) -> Result<QueryMetrics, ComplexityValidationError>

Compute query metrics without enforcing any limits.

Returns QueryMetrics for the query. Used by CLI tooling (explain, cost commands) where raw metrics are needed without a hard rejection.

§Errors

Returns ComplexityValidationError::MalformedQuery if the query cannot be parsed.

Source

pub const fn is_no_op(&self) -> bool

Returns true when every configured validation knob is disabled and the expensive AST parse can be skipped entirely.

A validator is “fully disabled” only when depth, complexity, AND alias checks are all off. The alias-amplification check is a distinct DoS vector — max_aliases_per_query == 0 disables it, any other value keeps it active even when depth/complexity validation are turned off.

Source

pub fn validate_query( &self, query: &str, ) -> Result<(), ComplexityValidationError>

Validate a GraphQL query string, enforcing configured limits.

§Errors

Returns ComplexityValidationError if the query violates any validation rules.

Source

pub fn validate_query_doc<'a>( &self, document: &'a Document<'a, String>, ) -> Result<(), ComplexityValidationError>

Validate an already-parsed GraphQL document, enforcing configured limits.

This is the AST-only entry point used by the server’s HTTP handler so the document is parsed exactly once per request (rather than once by the validator and once by the executor’s matcher). See F001 in IMPROVEMENTS.md.

§Errors

Returns ComplexityValidationError if the document violates depth, complexity, or alias-amplification limits.

Source

pub fn validate_variables( &self, variables: Option<&Value>, ) -> Result<(), ComplexityValidationError>

Validate variables JSON.

§Errors

Returns ComplexityValidationError if variables are not a JSON object or exceed MAX_VARIABLES_COUNT.

§Panics

Cannot panic in practice — the expect on as_object() is guarded by a preceding is_object() check that returns Err first.

Trait Implementations§

Source§

impl Clone for RequestValidator

Source§

fn clone(&self) -> RequestValidator

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RequestValidator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RequestValidator

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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