1package codegen
2
3import (
4 "fmt"
5 "strconv"
6 "strings"
7)
8
9type Directive struct {
10 Name string
11 Args []FieldArgument
12}
13
14func (d *Directive) ArgsFunc() string {
15 if len(d.Args) == 0 {
16 return ""
17 }
18
19 return "dir_" + d.Name + "_args"
20}
21
22func (d *Directive) CallArgs() string {
23 args := []string{"ctx", "obj", "n"}
24
25 for _, arg := range d.Args {
26 args = append(args, "args["+strconv.Quote(arg.GQLName)+"].("+arg.Signature()+")")
27 }
28
29 return strings.Join(args, ", ")
30}
31
32func (d *Directive) Declaration() string {
33 res := ucFirst(d.Name) + " func(ctx context.Context, obj interface{}, next graphql.Resolver"
34
35 for _, arg := range d.Args {
36 res += fmt.Sprintf(", %s %s", arg.GoVarName, arg.Signature())
37 }
38
39 res += ") (res interface{}, err error)"
40 return res
41}