unique_argument_names.go

 1package validator
 2
 3import (
 4	"github.com/vektah/gqlparser/ast"
 5	. "github.com/vektah/gqlparser/validator"
 6)
 7
 8func init() {
 9	AddRule("UniqueArgumentNames", func(observers *Events, addError AddErrFunc) {
10		observers.OnField(func(walker *Walker, field *ast.Field) {
11			checkUniqueArgs(field.Arguments, addError)
12		})
13
14		observers.OnDirective(func(walker *Walker, directive *ast.Directive) {
15			checkUniqueArgs(directive.Arguments, addError)
16		})
17	})
18}
19
20func checkUniqueArgs(args ast.ArgumentList, addError AddErrFunc) {
21	knownArgNames := map[string]bool{}
22
23	for _, arg := range args {
24		if knownArgNames[arg.Name] {
25			addError(
26				Message(`There can be only one argument named "%s".`, arg.Name),
27				At(arg.Position),
28			)
29		}
30
31		knownArgNames[arg.Name] = true
32	}
33}