github.com/ultraware/gqlgen@v0.7.2/codegen/templates/object.gotpl (about)

     1  {{ $object := . }}
     2  
     3  var {{ $object.GQLType|lcFirst}}Implementors = {{$object.Implementors}}
     4  
     5  // nolint: gocyclo, errcheck, gas, goconst
     6  {{- if .Stream }}
     7  func (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel ast.SelectionSet) func() graphql.Marshaler {
     8  	fields := graphql.CollectFields(ctx, sel, {{$object.GQLType|lcFirst}}Implementors)
     9  	ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
    10  		Object: {{$object.GQLType|quote}},
    11  	})
    12  	if len(fields) != 1 {
    13  		ec.Errorf(ctx, "must subscribe to exactly one stream")
    14  		return nil
    15  	}
    16  
    17  	switch fields[0].Name {
    18  	{{- range $field := $object.Fields }}
    19  	case "{{$field.GQLName}}":
    20  		return ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, fields[0])
    21  	{{- end }}
    22  	default:
    23  		panic("unknown field " + strconv.Quote(fields[0].Name))
    24  	}
    25  }
    26  {{- else }}
    27  func (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel ast.SelectionSet{{if not $object.Root}}, obj *{{$object.FullName}} {{end}}) graphql.Marshaler {
    28  	fields := graphql.CollectFields(ctx, sel, {{$object.GQLType|lcFirst}}Implementors)
    29  	{{if $object.Root}}
    30  		ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
    31  			Object: {{$object.GQLType|quote}},
    32  		})
    33  	{{end}}
    34  
    35  	{{if $object.IsConcurrent}} var wg sync.WaitGroup {{end}}
    36  	out := graphql.NewOrderedMap(len(fields))
    37  	invalid := false
    38  	for i, field := range fields {
    39  		out.Keys[i] = field.Alias
    40  
    41  		switch field.Name {
    42  		case "__typename":
    43  			out.Values[i] = graphql.MarshalString({{$object.GQLType|quote}})
    44  		{{- range $field := $object.Fields }}
    45  		case "{{$field.GQLName}}":
    46  			{{- if $field.IsConcurrent }}
    47  				wg.Add(1)
    48  				go func(i int, field graphql.CollectedField) {
    49  			{{- end }}
    50  				out.Values[i] = ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, field{{if not $object.Root}}, obj{{end}})
    51  				{{- if $field.ASTType.NonNull }}
    52  					if out.Values[i] == graphql.Null {
    53  						invalid = true
    54  					}
    55  				{{- end }}
    56  			{{- if $field.IsConcurrent }}
    57  					wg.Done()
    58  				}(i, field)
    59  			{{- end }}
    60  		{{- end }}
    61  		default:
    62  			panic("unknown field " + strconv.Quote(field.Name))
    63  		}
    64  	}
    65  	{{if $object.IsConcurrent}} wg.Wait() {{end}}
    66  	if invalid { return graphql.Null }
    67  	return out
    68  }
    69  {{- end }}