github.com/maeglindeveloper/gqlgen@v0.13.1-0.20210413081235-57808b12a0a0/plugin/federation/federation.gotpl (about)

     1  {{ reserveImport "context"  }}
     2  {{ reserveImport "errors"  }}
     3  {{ reserveImport "fmt"  }}
     4  {{ reserveImport "strings"  }}
     5  
     6  {{ reserveImport "github.com/99designs/gqlgen/plugin/federation/fedruntime" }}
     7  
     8  func (ec *executionContext) __resolve__service(ctx context.Context) (fedruntime.Service, error) {
     9  	if ec.DisableIntrospection {
    10  		return fedruntime.Service{}, errors.New("federated introspection disabled")
    11  	}
    12  
    13  	var sdl []string
    14  
    15  	for _, src := range sources {
    16  		if src.BuiltIn {
    17  			continue
    18  		}
    19  		sdl = append(sdl, src.Input)
    20  	}
    21  
    22  	return fedruntime.Service{
    23  		SDL: strings.Join(sdl, "\n"),
    24  	}, nil
    25  }
    26  
    27  {{if .Entities}}
    28  func (ec *executionContext) __resolve_entities(ctx context.Context, representations []map[string]interface{}) ([]fedruntime.Entity, error) {
    29  	list := []fedruntime.Entity{}
    30  	for _, rep := range representations {
    31  		typeName, ok := rep["__typename"].(string)
    32  		if !ok {
    33  			return nil, errors.New("__typename must be an existing string")
    34  		}
    35  		switch typeName {
    36  		{{ range .Entities }}
    37  			{{ if .ResolverName }}
    38  			case "{{.Def.Name}}":
    39  				{{ range $i, $keyField := .KeyFields -}}
    40  					id{{$i}}, err := ec.{{.TypeReference.UnmarshalFunc}}(ctx, rep["{{$keyField.Field.Name}}"])
    41  					if err != nil {
    42  						return nil, errors.New(fmt.Sprintf("Field %s undefined in schema.", "{{$keyField.Field.Name}}"))
    43  					}
    44  				{{end}}
    45  	
    46  				entity, err := ec.resolvers.Entity().{{.ResolverName | go}}(ctx,
    47  					{{ range $i, $_ := .KeyFields -}} id{{$i}}, {{end}})
    48  				if err != nil {
    49  					return nil, err
    50  				}
    51  	
    52  				{{ range .Requires }}
    53  					{{ range .Fields}}
    54  						entity.{{.NameGo}}, err = ec.{{.TypeReference.UnmarshalFunc}}(ctx, rep["{{.Name}}"])
    55  						if err != nil {
    56  							return nil, err
    57  						}
    58  					{{ end }}
    59  				{{ end }}
    60  				list = append(list, entity)
    61  			{{ end }}
    62  		{{ end }}
    63  		default:
    64  			return nil, errors.New("unknown type: "+typeName)
    65  		}
    66  	}
    67  	return list, nil
    68  }
    69  {{end}}