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