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}}