1{{- range $object := .Objects }}{{- range $field := $object.Fields }}
2
3{{- if $object.Stream }}
4 func (ec *executionContext) _{{$object.Name}}_{{$field.Name}}(ctx context.Context, field graphql.CollectedField) func() graphql.Marshaler {
5 ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
6 Field: field,
7 Args: nil,
8 })
9 {{- if $field.Args }}
10 rawArgs := field.ArgumentMap(ec.Variables)
11 args, err := ec.{{ $field.ArgsFunc }}(ctx,rawArgs)
12 if err != nil {
13 ec.Error(ctx, err)
14 return nil
15 }
16 {{- end }}
17 // FIXME: subscriptions are missing request middleware stack https://github.com/99designs/gqlgen/issues/259
18 // and Tracer stack
19 rctx := ctx
20 results, err := ec.resolvers.{{ $field.ShortInvocation }}
21 if err != nil {
22 ec.Error(ctx, err)
23 return nil
24 }
25 return func() graphql.Marshaler {
26 res, ok := <-results
27 if !ok {
28 return nil
29 }
30 return graphql.WriterFunc(func(w io.Writer) {
31 w.Write([]byte{'{'})
32 graphql.MarshalString(field.Alias).MarshalGQL(w)
33 w.Write([]byte{':'})
34 ec.{{ $field.TypeReference.MarshalFunc }}(ctx, field.Selections, res).MarshalGQL(w)
35 w.Write([]byte{'}'})
36 })
37 }
38 }
39{{ else }}
40 func (ec *executionContext) _{{$object.Name}}_{{$field.Name}}(ctx context.Context, field graphql.CollectedField{{ if not $object.Root }}, obj {{$object.Reference | ref}}{{end}}) (ret graphql.Marshaler) {
41 ctx = ec.Tracer.StartFieldExecution(ctx, field)
42 defer func () {
43 if r := recover(); r != nil {
44 ec.Error(ctx, ec.Recover(ctx, r))
45 ret = graphql.Null
46 }
47 ec.Tracer.EndFieldExecution(ctx)
48 }()
49 rctx := &graphql.ResolverContext{
50 Object: {{$object.Name|quote}},
51 Field: field,
52 Args: nil,
53 IsMethod: {{or $field.IsMethod $field.IsResolver}},
54 }
55 ctx = graphql.WithResolverContext(ctx, rctx)
56 {{- if $field.Args }}
57 rawArgs := field.ArgumentMap(ec.Variables)
58 args, err := ec.{{ $field.ArgsFunc }}(ctx,rawArgs)
59 if err != nil {
60 ec.Error(ctx, err)
61 return graphql.Null
62 }
63 rctx.Args = args
64 {{- end }}
65 ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
66 {{- if $.Directives.LocationDirectives "FIELD" }}
67 resTmp := ec._fieldMiddleware(ctx, {{if $object.Root}}nil{{else}}obj{{end}}, func(rctx context.Context) (interface{}, error) {
68 {{ template "field" $field }}
69 })
70 {{ else }}
71 resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
72 {{ template "field" $field }}
73 })
74 if err != nil {
75 ec.Error(ctx, err)
76 return graphql.Null
77 }
78 {{- end }}
79 if resTmp == nil {
80 {{- if $field.TypeReference.GQL.NonNull }}
81 if !ec.HasError(rctx) {
82 ec.Errorf(ctx, "must not be null")
83 }
84 {{- end }}
85 return graphql.Null
86 }
87 res := resTmp.({{$field.TypeReference.GO | ref}})
88 rctx.Result = res
89 ctx = ec.Tracer.StartFieldChildExecution(ctx)
90 return ec.{{ $field.TypeReference.MarshalFunc }}(ctx, field.Selections, res)
91 }
92{{ end }}
93
94{{- end }}{{- end}}
95
96{{ define "field" }}
97 {{- if .HasDirectives -}}
98 directive0 := func(rctx context.Context) (interface{}, error) {
99 ctx = rctx // use context from middleware stack in children
100 {{ template "fieldDefinition" . }}
101 }
102 {{ template "implDirectives" . }}
103 tmp, err := directive{{.ImplDirectives|len}}(rctx)
104 if err != nil {
105 return nil, err
106 }
107 if data, ok := tmp.({{ .TypeReference.GO | ref }}) ; ok {
108 return data, nil
109 }
110 {{- if .TypeReference.IsNilable -}}
111 else if tmp == nil {
112 return nil, nil
113 }
114 {{- end }}
115 return nil, fmt.Errorf(`unexpected type %T from directive, should be {{ .TypeReference.GO }}`, tmp)
116 {{- else -}}
117 ctx = rctx // use context from middleware stack in children
118 {{ template "fieldDefinition" . }}
119 {{- end -}}
120{{ end }}
121
122{{ define "fieldDefinition" }}
123 {{- if .IsResolver -}}
124 return ec.resolvers.{{ .ShortInvocation }}
125 {{- else if .IsMap -}}
126 switch v := {{.GoReceiverName}}[{{.Name|quote}}].(type) {
127 case {{.TypeReference.GO | ref}}:
128 return v, nil
129 case {{.TypeReference.Elem.GO | ref}}:
130 return &v, nil
131 case nil:
132 return ({{.TypeReference.GO | ref}})(nil), nil
133 default:
134 return nil, fmt.Errorf("unexpected type %T for field %s", v, {{ .Name | quote}})
135 }
136 {{- else if .IsMethod -}}
137 {{- if .NoErr -}}
138 return {{.GoReceiverName}}.{{.GoFieldName}}({{ .CallArgs }}), nil
139 {{- else -}}
140 return {{.GoReceiverName}}.{{.GoFieldName}}({{ .CallArgs }})
141 {{- end -}}
142 {{- else if .IsVariable -}}
143 return {{.GoReceiverName}}.{{.GoFieldName}}, nil
144 {{- end }}
145{{- end }}