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