...

Source file src/github.com/vektah/gqlparser/validator/rules/variables_in_allowed_position.go

Documentation: github.com/vektah/gqlparser/validator/rules

     1  package validator
     2  
     3  import (
     4  	"github.com/vektah/gqlparser/ast"
     5  	. "github.com/vektah/gqlparser/validator"
     6  )
     7  
     8  func init() {
     9  	AddRule("VariablesInAllowedPosition", func(observers *Events, addError AddErrFunc) {
    10  		observers.OnValue(func(walker *Walker, value *ast.Value) {
    11  			if value.Kind != ast.Variable || value.ExpectedType == nil || value.VariableDefinition == nil || walker.CurrentOperation == nil {
    12  				return
    13  			}
    14  
    15  			// todo: move me into walk
    16  			// If there is a default non nullable types can be null
    17  			if value.VariableDefinition.DefaultValue != nil && value.VariableDefinition.DefaultValue.Kind != ast.NullValue {
    18  				if value.ExpectedType.NonNull {
    19  					value.ExpectedType.NonNull = false
    20  				}
    21  			}
    22  
    23  			if !value.VariableDefinition.Type.IsCompatible(value.ExpectedType) {
    24  				addError(
    25  					Message(
    26  						`Variable "%s" of type "%s" used in position expecting type "%s".`,
    27  						value,
    28  						value.VariableDefinition.Type.String(),
    29  						value.ExpectedType.String(),
    30  					),
    31  					At(value.Position),
    32  				)
    33  			}
    34  		})
    35  	})
    36  }
    37  

View as plain text