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