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 PluginContextThe 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.
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.
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.
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.
Implementations§
Source§impl OnGraphQLValidationStartHookPayload<'_>
impl OnGraphQLValidationStartHookPayload<'_>
Sourcepub fn with_validation_plan<TValidationPlan: Into<ValidationPlan>>(
self,
validation_plan: TValidationPlan,
) -> Self
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
Sourcepub fn with_schema<TSchema: Into<Arc<SchemaDocument>>>(
self,
schema: TSchema,
) -> Self
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>
impl<'exec> OnGraphQLValidationStartHookPayload<'exec>
Sourcepub fn with_validation_rule<TValidationRule: ValidationRule + 'static>(
self,
rule: TValidationRule,
) -> Self
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
Sourcepub fn filter_validation_rules<F>(self, f: F) -> Self
pub fn filter_validation_rules<F>(self, f: F) -> Self
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>
impl<'exec> StartHookPayload<OnGraphQLValidationEndHookPayload, Response> for OnGraphQLValidationStartHookPayload<'exec>
Source§fn proceed<'exec>(self) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
fn proceed<'exec>(self) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
Source§fn end_with_response<'exec>(
self,
output: TResponse,
) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
fn end_with_response<'exec>( self, output: TResponse, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
Source§fn end_with_graphql_error<'exec>(
self,
error: GraphQLError,
status_code: StatusCode,
) -> StartHookResult<'exec, Self, TEndPayload, TResponse>where
TResponse: FromGraphQLErrorToResponse,
fn end_with_graphql_error<'exec>(
self,
error: GraphQLError,
status_code: StatusCode,
) -> StartHookResult<'exec, Self, TEndPayload, TResponse>where
TResponse: FromGraphQLErrorToResponse,
Source§fn on_end<'exec, F>(
self,
f: F,
) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
fn on_end<'exec, F>( self, f: F, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
Auto Trait Implementations§
impl<'exec> Freeze for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> !RefUnwindSafe for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> Send for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> Sync for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> Unpin for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> UnsafeUnpin for OnGraphQLValidationStartHookPayload<'exec>
impl<'exec> !UnwindSafe for OnGraphQLValidationStartHookPayload<'exec>
Blanket Implementations§
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
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request