...
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("ScalarLeafs", func(observers *Events, addError AddErrFunc) {
10 observers.OnField(func(walker *Walker, field *ast.Field) {
11 if field.Definition == nil {
12 return
13 }
14
15 fieldType := walker.Schema.Types[field.Definition.Type.Name()]
16 if fieldType == nil {
17 return
18 }
19
20 if fieldType.IsLeafType() && len(field.SelectionSet) > 0 {
21 addError(
22 Message(`Field "%s" must not have a selection since type "%s" has no subfields.`, field.Name, fieldType.Name),
23 At(field.Position),
24 )
25 }
26
27 if !fieldType.IsLeafType() && len(field.SelectionSet) == 0 {
28 addError(
29 Message(`Field "%s" of type "%s" must have a selection of subfields.`, field.Name, field.Definition.Type.String()),
30 Suggestf(`"%s { ... }"`, field.Name),
31 At(field.Position),
32 )
33 }
34 })
35 })
36 }
37
View as plain text