git.sr.ht/~sircmpwn/gqlgen@v0.0.0-20200522192042-c84d29a1c940/plugin/federation/federation.gotpl (about)

     1  {{ reserveImport "context"  }}
     2  {{ reserveImport "errors"  }}
     3  {{ reserveImport "fmt"  }}
     4  {{ reserveImport "strings"  }}
     5  
     6  {{ reserveImport "git.sr.ht/~sircmpwn/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  		case "{{.Def.Name}}":
    38  			{{ range $i, $keyField := .KeyFields -}}
    39  				id{{$i}}, err := ec.{{.TypeReference.UnmarshalFunc}}(ctx, rep["{{$keyField.Field.Name}}"])
    40  				if err != nil {
    41  					return nil, errors.New(fmt.Sprintf("Field %s undefined in schema.", "{{$keyField.Field.Name}}"))
    42  				}
    43  			{{end}}
    44  
    45  			entity, err := ec.resolvers.Entity().{{.ResolverName | go}}(ctx,
    46  				{{ range $i, $_ := .KeyFields -}} id{{$i}}, {{end}})
    47  			if err != nil {
    48  				return nil, err
    49  			}
    50  
    51  			{{ range .Requires }}
    52  				{{ range .Fields}}
    53  					entity.{{.NameGo}}, err = ec.{{.TypeReference.UnmarshalFunc}}(ctx, rep["{{.Name}}"])
    54  					if err != nil {
    55  						return nil, err
    56  					}
    57  				{{ end }}
    58  			{{ end }}
    59  			list = append(list, entity)
    60  		{{ end }}
    61  		default:
    62  			return nil, errors.New("unknown type: "+typeName)
    63  		}
    64  	}
    65  	return list, nil
    66  }
    67  {{end}}