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}}) graphql.Marshaler {
41 ctx = ec.Tracer.StartFieldExecution(ctx, field)
42 defer func () { ec.Tracer.EndFieldExecution(ctx) }()
43 rctx := &graphql.ResolverContext{
44 Object: {{$object.Name|quote}},
45 Field: field,
46 Args: nil,
47 IsMethod: {{or $field.IsMethod $field.IsResolver}},
48 }
49 ctx = graphql.WithResolverContext(ctx, rctx)
50 {{- if $field.Args }}
51 rawArgs := field.ArgumentMap(ec.Variables)
52 args, err := ec.{{ $field.ArgsFunc }}(ctx,rawArgs)
53 if err != nil {
54 ec.Error(ctx, err)
55 return graphql.Null
56 }
57 rctx.Args = args
58 {{- end }}
59 ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
60 resTmp := ec.FieldMiddleware(ctx, {{if $object.Root}}nil{{else}}obj{{end}}, func(rctx context.Context) (interface{}, error) {
61 ctx = rctx // use context from middleware stack in children
62 {{- if $field.IsResolver }}
63 return ec.resolvers.{{ $field.ShortInvocation }}
64 {{- else if $field.IsMap }}
65 switch v := {{$field.GoReceiverName}}[{{$field.Name|quote}}].(type) {
66 case {{$field.TypeReference.GO | ref}}:
67 return v, nil
68 case {{$field.TypeReference.Elem.GO | ref}}:
69 return &v, nil
70 case nil:
71 return ({{$field.TypeReference.GO | ref}})(nil), nil
72 default:
73 return nil, fmt.Errorf("unexpected type %T for field %s", v, {{ $field.Name | quote}})
74 }
75 {{- else if $field.IsMethod }}
76 {{- if $field.NoErr }}
77 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}({{ $field.CallArgs }}), nil
78 {{- else }}
79 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}({{ $field.CallArgs }})
80 {{- end }}
81 {{- else if $field.IsVariable }}
82 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}, nil
83 {{- end }}
84 })
85 if resTmp == nil {
86 {{- if $field.TypeReference.GQL.NonNull }}
87 if !ec.HasError(rctx) {
88 ec.Errorf(ctx, "must not be null")
89 }
90 {{- end }}
91 return graphql.Null
92 }
93 res := resTmp.({{$field.TypeReference.GO | ref}})
94 rctx.Result = res
95 ctx = ec.Tracer.StartFieldChildExecution(ctx)
96 return ec.{{ $field.TypeReference.MarshalFunc }}(ctx, field.Selections, res)
97 }
98{{ end }}
99
100{{- end }}{{- end}}