1{{ define "implDirectives" }}{{ $in := .DirectiveObjName }}
2 {{- range $i, $directive := .ImplDirectives -}}
3 directive{{add $i 1}} := func(ctx context.Context) (interface{}, error) {
4 {{- range $arg := $directive.Args }}
5 {{- if notNil "Value" $arg }}
6 {{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Value | dump }})
7 if err != nil{
8 return nil, err
9 }
10 {{- else if notNil "Default" $arg }}
11 {{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Default | dump }})
12 if err != nil{
13 return nil, err
14 }
15 {{- end }}
16 {{- end }}
17 if ec.directives.{{$directive.Name|ucFirst}} == nil {
18 return nil, errors.New("directive {{$directive.Name}} is not implemented")
19 }
20 return ec.directives.{{$directive.Name|ucFirst}}({{$directive.ResolveArgs $in $i }})
21 }
22 {{ end -}}
23{{ end }}
24
25{{define "queryDirectives"}}
26 for _, d := range obj.Directives {
27 switch d.Name {
28 {{- range $directive := . }}
29 case "{{$directive.Name}}":
30 {{- if $directive.Args }}
31 rawArgs := d.ArgumentMap(ec.Variables)
32 args, err := ec.{{ $directive.ArgsFunc }}(ctx,rawArgs)
33 if err != nil {
34 ec.Error(ctx, err)
35 return graphql.Null
36 }
37 {{- end }}
38 n := next
39 next = func(ctx context.Context) (interface{}, error) {
40 if ec.directives.{{$directive.Name|ucFirst}} == nil {
41 return nil, errors.New("directive {{$directive.Name}} is not implemented")
42 }
43 return ec.directives.{{$directive.Name|ucFirst}}({{$directive.CallArgs}})
44 }
45 {{- end }}
46 }
47 }
48 tmp, err := next(ctx)
49 if err != nil {
50 ec.Error(ctx, err)
51 return graphql.Null
52 }
53 if data, ok := tmp.(graphql.Marshaler); ok {
54 return data
55 }
56 ec.Errorf(ctx, `unexpected type %T from directive, should be graphql.Marshaler`, tmp)
57 return graphql.Null
58{{end}}
59
60{{ if .Directives.LocationDirectives "QUERY" }}
61func (ec *executionContext) _queryMiddleware(ctx context.Context, obj *ast.OperationDefinition, next func(ctx context.Context) (interface{}, error)) graphql.Marshaler {
62 {{ template "queryDirectives" .Directives.LocationDirectives "QUERY" }}
63}
64{{ end }}
65
66{{ if .Directives.LocationDirectives "MUTATION" }}
67func (ec *executionContext) _mutationMiddleware(ctx context.Context, obj *ast.OperationDefinition, next func(ctx context.Context) (interface{}, error)) graphql.Marshaler {
68 {{ template "queryDirectives" .Directives.LocationDirectives "MUTATION" }}
69}
70{{ end }}
71
72{{ if .Directives.LocationDirectives "SUBSCRIPTION" }}
73func (ec *executionContext) _subscriptionMiddleware(ctx context.Context, obj *ast.OperationDefinition, next func(ctx context.Context) (interface{}, error)) func(ctx context.Context) graphql.Marshaler {
74 for _, d := range obj.Directives {
75 switch d.Name {
76 {{- range $directive := .Directives.LocationDirectives "SUBSCRIPTION" }}
77 case "{{$directive.Name}}":
78 {{- if $directive.Args }}
79 rawArgs := d.ArgumentMap(ec.Variables)
80 args, err := ec.{{ $directive.ArgsFunc }}(ctx,rawArgs)
81 if err != nil {
82 ec.Error(ctx, err)
83 return func(ctx context.Context) graphql.Marshaler {
84 return graphql.Null
85 }
86 }
87 {{- end }}
88 n := next
89 next = func(ctx context.Context) (interface{}, error) {
90 if ec.directives.{{$directive.Name|ucFirst}} == nil {
91 return nil, errors.New("directive {{$directive.Name}} is not implemented")
92 }
93 return ec.directives.{{$directive.Name|ucFirst}}({{$directive.CallArgs}})
94 }
95 {{- end }}
96 }
97 }
98 tmp, err := next(ctx)
99 if err != nil {
100 ec.Error(ctx, err)
101 return func(ctx context.Context) graphql.Marshaler {
102 return graphql.Null
103 }
104 }
105 if data, ok := tmp.(func(ctx context.Context) graphql.Marshaler); ok {
106 return data
107 }
108 ec.Errorf(ctx, `unexpected type %T from directive, should be graphql.Marshaler`, tmp)
109 return func(ctx context.Context) graphql.Marshaler {
110 return graphql.Null
111 }
112}
113{{ end }}
114
115{{ if .Directives.LocationDirectives "FIELD" }}
116 func (ec *executionContext) _fieldMiddleware(ctx context.Context, obj interface{}, next graphql.Resolver) interface{} {
117 {{- if .Directives.LocationDirectives "FIELD" }}
118 fc := graphql.GetFieldContext(ctx)
119 for _, d := range fc.Field.Directives {
120 switch d.Name {
121 {{- range $directive := .Directives.LocationDirectives "FIELD" }}
122 case "{{$directive.Name}}":
123 {{- if $directive.Args }}
124 rawArgs := d.ArgumentMap(ec.Variables)
125 args, err := ec.{{ $directive.ArgsFunc }}(ctx,rawArgs)
126 if err != nil {
127 ec.Error(ctx, err)
128 return nil
129 }
130 {{- end }}
131 n := next
132 next = func(ctx context.Context) (interface{}, error) {
133 if ec.directives.{{$directive.Name|ucFirst}} == nil {
134 return nil, errors.New("directive {{$directive.Name}} is not implemented")
135 }
136 return ec.directives.{{$directive.Name|ucFirst}}({{$directive.CallArgs}})
137 }
138 {{- end }}
139 }
140 }
141 {{- end }}
142 res, err := ec.ResolverMiddleware(ctx, next)
143 if err != nil {
144 ec.Error(ctx, err)
145 return nil
146 }
147 return res
148 }
149{{ end }}
View as plain text