Skip to main content

OnGraphQLValidationStartHookPayload

Struct OnGraphQLValidationStartHookPayload 

Source
pub struct OnGraphQLValidationStartHookPayload<'exec> {
    pub router_http_request: &'exec RouterHttpRequest<'exec>,
    pub context: &'exec PluginContext,
    pub schema: Arc<ConsumerSchema>,
    pub document: Arc<Document>,
    pub validation_plan: Arc<ValidationPlan>,
    pub errors: Option<Arc<Vec<ValidationError>>>,
}

Fields§

§router_http_request: &'exec RouterHttpRequest<'exec>

The incoming HTTP request to the router for which the GraphQL execution is happening. It includes all the details of the request such as headers, body, etc.

Example:

 let my_header = payload.router_http_request.headers.get("my-header");
 // do something with the header...
 payload.proceed()
§context: &'exec PluginContext

The context object that can be used to share data across different plugin hooks for the same request. It is unique per request and is dropped after the response is sent.

Learn more about the context data sharing in the docs

§schema: Arc<ConsumerSchema>

The GraphQL Schema that the document will be validated against. This is not the same with the supergraph. This is the public schema exposed by the router to the clients, which is generated from the supergraph and can be modified by the plugins. The plugins can replace the input schema to be used for validation and the new schema will be used in the validation process instead of the original one.

See an example to see when to override the schema

§document: Arc<Document>

Parsed GraphQL document from the query string in the GraphQL parameters. It contains the Abstract Syntax Tree (AST) representation of the GraphQL query, mutation, or subscription sent by the client in the request body.

But the plugins can replace the input document AST to be used for validation and the new document will be used in the validation process instead of the original one.

§validation_plan: Arc<ValidationPlan>

The set of rules to be used in the validation process. The plugins can modify the validation rules to be used in the validation process by adding new rules or removing existing ones.

See an example

§errors: Option<Arc<Vec<ValidationError>>>

Overriding the validation errors to be used in the execution instead of the ones generated from the validation process. This is useful for plugins that want to generate custom validation errors in a custom way, or want to override the validation errors for testing or other purposes.

Learn more about overriding the default behavior

Implementations§

Source§

impl OnGraphQLValidationStartHookPayload<'_>

Source

pub fn with_validation_plan<TValidationPlan: Into<ValidationPlan>>( self, validation_plan: TValidationPlan, ) -> Self

Override validation rules to be used in the validation process by adding a new rule. See an example

Source

pub fn with_schema<TSchema: Into<Arc<SchemaDocument>>>( self, schema: TSchema, ) -> Self

Override the GraphQL Schema that the document will be validated against. See an example to see when to override the schema

Source§

impl<'exec> OnGraphQLValidationStartHookPayload<'exec>

Source

pub fn with_validation_rule<TValidationRule: ValidationRule + 'static>( self, rule: TValidationRule, ) -> Self

Adds a new validation rule to the existing set of rules to be used in the validation process. See an example

Source

pub fn filter_validation_rules<F>(self, f: F) -> Self
where F: FnMut(&Box<dyn ValidationRule>) -> bool,

Filters the existing validation rules to be used in the validation process by removing the rules that don’t satisfy the given predicate function.

Trait Implementations§

Source§

impl<'exec> StartHookPayload<OnGraphQLValidationEndHookPayload, Response> for OnGraphQLValidationStartHookPayload<'exec>

Source§

fn proceed<'exec>(self) -> StartHookResult<'exec, Self, TEndPayload, TResponse>

Continue with the regular flow of the hook This is called in most cases when you don’t short-circuit the hook with a response or an error. Read more
Source§

fn end_with_response<'exec>( self, output: TResponse, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>

End the hook execution and return a response to the client immediately, skipping the rest of the execution flow.
Source§

fn end_with_graphql_error<'exec>( self, error: GraphQLError, status_code: StatusCode, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
where TResponse: FromGraphQLErrorToResponse,

End the hook execution with a GraphQL error, returning a response with the appropriate error format to the client immediately, skipping the rest of the execution flow. Read more
Source§

fn on_end<'exec, F>( self, f: F, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
where F: FnOnce(TEndPayload) -> EndHookResult<TEndPayload, TResponse> + Send + 'exec,

Attach a callback to be executed at the end of the hook, allowing you to manipulate the end payload or response. This is useful when you want to execute some logic after the main execution of the hook 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> 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
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<Source, Target> OctetsInto<Target> for Source
where Target: OctetsFrom<Source>,

Source§

type Error = <Target as OctetsFrom<Source>>::Error

Source§

fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
Source§

fn octets_into(self) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
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, 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