github.com/HaswinVidanage/gqlgen@v0.8.1-0.20220609041233-69528c1bf712/codegen/field.gotpl (about) 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/HaswinVidanage/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.Type | 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 } 48 ctx = graphql.WithResolverContext(ctx, rctx) 49 {{- if $field.Args }} 50 rawArgs := field.ArgumentMap(ec.Variables) 51 args, err := ec.{{ $field.ArgsFunc }}(ctx,rawArgs) 52 if err != nil { 53 ec.Error(ctx, err) 54 return graphql.Null 55 } 56 rctx.Args = args 57 {{- end }} 58 ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) 59 resTmp := ec.FieldMiddleware(ctx, {{if $object.Root}}nil{{else}}obj{{end}}, func(rctx context.Context) (interface{}, error) { 60 ctx = rctx // use context from middleware stack in children 61 {{- if $field.IsResolver }} 62 return ec.resolvers.{{ $field.ShortInvocation }} 63 {{- else if $field.IsMethod }} 64 {{- if $field.NoErr }} 65 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}({{ $field.CallArgs }}), nil 66 {{- else }} 67 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}({{ $field.CallArgs }}) 68 {{- end }} 69 {{- else if $field.IsVariable }} 70 return {{$field.GoReceiverName}}.{{$field.GoFieldName}}, nil 71 {{- end }} 72 }) 73 if resTmp == nil { 74 {{- if $field.TypeReference.GQL.NonNull }} 75 if !ec.HasError(rctx) { 76 ec.Errorf(ctx, "must not be null") 77 } 78 {{- end }} 79 return graphql.Null 80 } 81 res := resTmp.({{$field.TypeReference.GO | ref}}) 82 rctx.Result = res 83 ctx = ec.Tracer.StartFieldChildExecution(ctx) 84 return ec.{{ $field.TypeReference.MarshalFunc }}(ctx, field.Selections, res) 85 } 86 {{ end }} 87 88 {{- end }}{{- end}}