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