From 20250f189458d46e133a2cd583f0c503b40d51b2 Mon Sep 17 00:00:00 2001 From: Adam Scarr Date: Fri, 27 Apr 2018 16:41:06 +1000 Subject: [PATCH 1/2] Add fully customizable resolver errors --- .gitattributes | 1 + README.md | 1 + client/client.go | 26 ++++--- codegen/codegen.go | 2 +- codegen/object.go | 9 ++- codegen/templates/args.gotpl | 4 +- codegen/templates/field.gotpl | 30 ++++++--- codegen/templates/generated.gotpl | 6 +- codegen/templates/object.gotpl | 11 ++- example/scalars/scalar_test.go | 2 +- example/starwars/starwars_test.go | 2 +- example/todo/server/server.go | 3 +- example/todo/todo_test.go | 2 +- graphql/context.go | 25 ++++++- graphql/error.go | 59 +++++++++------- graphql/errors_test.go | 50 ++++++++++++++ graphql/response.go | 14 ++-- handler/graphql.go | 30 ++++++--- handler/stub.go | 5 +- handler/websocket.go | 28 ++++---- neelance/errors/errors.go | 32 --------- neelance/errors/errors_test.go | 63 ----------------- test/element.go | 5 ++ test/resolvers_test.go | 108 ++++++++++++++---------------- test/schema.graphql | 6 ++ test/types.json | 3 +- 26 files changed, 281 insertions(+), 246 deletions(-) create mode 100644 graphql/errors_test.go delete mode 100644 neelance/errors/errors_test.go create mode 100644 test/element.go diff --git a/.gitattributes b/.gitattributes index f6ffcb7da1..df1ea74311 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ /codegen/templates/data.go linguist-generated /example/dataloader/*_gen.go linguist-generated +generated.go linguist-generated diff --git a/README.md b/README.md index 034cbb36c4..05dfb9715b 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,4 @@ See the [docs](https://gqlgen.com/) for a getting started guide. | Hooks for error logging | :+1: | :no_entry: | :no_entry: | :no_entry: | | Dataloading | :+1: | :+1: | :no_entry: | :warning: | | Concurrency | :+1: | :+1: | :no_entry: [pr](https://github.com/graphql-go/graphql/pull/132) | :+1: | +| Custom errors & error.path | :+1: | :no_entry: [is](https://github.com/graphql-go/graphql/issues/259) | :no_entry: | :no_entry: | diff --git a/client/client.go b/client/client.go index 0b83aad989..169a1327ba 100644 --- a/client/client.go +++ b/client/client.go @@ -9,7 +9,6 @@ import ( "net/http" "github.com/mitchellh/mapstructure" - "github.com/vektah/gqlgen/neelance/errors" ) // Client for graphql requests @@ -101,23 +100,28 @@ func (p *Client) Post(query string, response interface{}, options ...Option) err // decode it into map string first, let mapstructure do the final decode // because it can be much stricter about unknown fields. - respDataRaw := map[string]interface{}{} + respDataRaw := struct { + Data interface{} + Errors json.RawMessage + }{} err = json.Unmarshal(responseBody, &respDataRaw) if err != nil { return fmt.Errorf("decode: %s", err.Error()) } - if respDataRaw["errors"] != nil { - var errs []*errors.QueryError - if err := unpack(respDataRaw["errors"], &errs); err != nil { - return err - } - if len(errs) > 0 { - return fmt.Errorf("errors: %s", errs) - } + if respDataRaw.Errors != nil { + return RawJsonError{respDataRaw.Errors} } - return unpack(respDataRaw["data"], response) + return unpack(respDataRaw.Data, response) +} + +type RawJsonError struct { + json.RawMessage +} + +func (r RawJsonError) Error() string { + return string(r.RawMessage) } func unpack(data interface{}, into interface{}) error { diff --git a/codegen/codegen.go b/codegen/codegen.go index 7fd9ecc6a5..26a1eefb19 100644 --- a/codegen/codegen.go +++ b/codegen/codegen.go @@ -168,7 +168,7 @@ func write(filename string, b []byte) error { formatted, err := gofmt(filename, b) if err != nil { - fmt.Fprintf(os.Stderr, "gofmt failed: %s", err.Error()) + fmt.Fprintf(os.Stderr, "gofmt failed: %s\n", err.Error()) formatted = b } diff --git a/codegen/object.go b/codegen/object.go index 3fd1f63dda..5a4de009a6 100644 --- a/codegen/object.go +++ b/codegen/object.go @@ -82,7 +82,7 @@ func (f *Field) CallArgs() string { var args []string if f.GoMethodName == "" { - args = append(args, "rctx") + args = append(args, "ctx") if !f.Object.Root { args = append(args, "obj") @@ -115,7 +115,12 @@ func (f *Field) doWriteJson(val string, remainingMods []string, isPtr bool, dept return tpl(`{{.arr}} := graphql.Array{} for {{.index}} := range {{.val}} { - {{.arr}} = append({{.arr}}, func() graphql.Marshaler { {{ .next }} }()) + {{.arr}} = append({{.arr}}, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex({{.index}}) + defer rctx.Pop() + {{ .next }} + }()) } return {{.arr}}`, map[string]interface{}{ "val": val, diff --git a/codegen/templates/args.gotpl b/codegen/templates/args.gotpl index af0f5829b6..f53aceec1e 100644 --- a/codegen/templates/args.gotpl +++ b/codegen/templates/args.gotpl @@ -5,7 +5,7 @@ var err error {{$arg.Unmarshal (print "arg" $i) "tmp" }} if err != nil { - ec.Error(err) + ec.Error(ctx, err) {{- if $arg.Object.Stream }} return nil {{- else }} @@ -17,7 +17,7 @@ var err error {{$arg.Unmarshal (print "arg" $i) "tmp" }} if err != nil { - ec.Error(err) + ec.Error(ctx, err) {{- if $arg.Object.Stream }} return nil {{- else }} diff --git a/codegen/templates/field.gotpl b/codegen/templates/field.gotpl index 4a81648221..87f9611c0c 100644 --- a/codegen/templates/field.gotpl +++ b/codegen/templates/field.gotpl @@ -4,10 +4,10 @@ {{- if $object.Stream }} func (ec *executionContext) _{{$object.GQLType}}_{{$field.GQLName}}(ctx context.Context, field graphql.CollectedField) func() graphql.Marshaler { {{- template "args.gotpl" $field.Args }} - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field}) + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field}) results, err := ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }}) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return nil } return func() graphql.Marshaler { @@ -25,14 +25,26 @@ {{- template "args.gotpl" $field.Args }} {{- if $field.IsConcurrent }} + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: {{$object.GQLType|quote}}, + Args: {{if $field.Args }}args{{else}}nil{{end}}, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() + {{ else }} + rctx := graphql.GetResolverContext(ctx) + rctx.Object = {{$object.GQLType|quote}} + rctx.Args = {{if $field.Args }}args{{else}}nil{{end}} + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() {{- end }} {{- if $field.GoVarName }} @@ -43,21 +55,17 @@ {{- else }} res, err := {{$field.GoMethodName}}({{ $field.CallArgs }}) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } {{- end }} {{- else }} - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: {{$object.GQLType|quote}}, - Args: {{if $field.Args }}args{{else}}nil{{end}}, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { return ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }}) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { diff --git a/codegen/templates/generated.gotpl b/codegen/templates/generated.gotpl index 5ae2120cd7..9e579eae3c 100644 --- a/codegen/templates/generated.gotpl +++ b/codegen/templates/generated.gotpl @@ -44,7 +44,7 @@ func (e *executableSchema) Query(ctx context.Context, op *query.Operation) *grap Errors: ec.Errors, } {{- else }} - return &graphql.Response{Errors: []*errors.QueryError{ {Message: "queries are not supported"} }} + return graphql.ErrorResponse(ctx, "queries are not supported") {{- end }} } @@ -64,7 +64,7 @@ func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *g Errors: ec.Errors, } {{- else }} - return &graphql.Response{Errors: []*errors.QueryError{ {Message: "mutations are not supported"} }} + return graphql.ErrorResponse(ctx, "mutations are not supported") {{- end }} } @@ -96,7 +96,7 @@ func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation } } {{- else }} - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{ {Message: "subscriptions are not supported"} }}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) {{- end }} } diff --git a/codegen/templates/object.gotpl b/codegen/templates/object.gotpl index f8c3daea5d..b531d5fe6d 100644 --- a/codegen/templates/object.gotpl +++ b/codegen/templates/object.gotpl @@ -6,9 +6,11 @@ var {{ $object.GQLType|lcFirst}}Implementors = {{$object.Implementors}} {{- if .Stream }} func (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection) func() graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables) - + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: {{$object.GQLType|quote}}, + }) if len(fields) != 1 { - ec.Errorf("must subscribe to exactly one stream") + ec.Errorf(ctx, "must subscribe to exactly one stream") return nil } @@ -24,6 +26,11 @@ func (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []quer {{- else }} func (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection{{if not $object.Root}}, obj *{{$object.FullName}} {{end}}) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables) + {{if $object.Root}} + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: {{$object.GQLType|quote}}, + }) + {{end}} out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias diff --git a/example/scalars/scalar_test.go b/example/scalars/scalar_test.go index 0899fde5f1..34416ad92c 100644 --- a/example/scalars/scalar_test.go +++ b/example/scalars/scalar_test.go @@ -59,7 +59,7 @@ func TestScalars(t *testing.T) { var resp struct{ Search []RawUser } err := c.Post(`{ search(input:{createdAfter:"2014"}) { id } }`, &resp) - require.EqualError(t, err, "errors: [graphql: time should be a unix timestamp]") + require.EqualError(t, err, `[{"message":"time should be a unix timestamp"}]`) }) t.Run("scalar resolver methods", func(t *testing.T) { diff --git a/example/starwars/starwars_test.go b/example/starwars/starwars_test.go index bc33edc214..53cc7b32dd 100644 --- a/example/starwars/starwars_test.go +++ b/example/starwars/starwars_test.go @@ -215,7 +215,7 @@ func TestStarwars(t *testing.T) { } }`, &resp, client.Var("episode", "INVALID")) - require.EqualError(t, err, "errors: [graphql: INVALID is not a valid Episode]") + require.EqualError(t, err, `[{"message":"INVALID is not a valid Episode"}]`) }) t.Run("introspection", func(t *testing.T) { diff --git a/example/todo/server/server.go b/example/todo/server/server.go index 0c824d0e79..e44ec3f1b4 100644 --- a/example/todo/server/server.go +++ b/example/todo/server/server.go @@ -16,7 +16,8 @@ func main() { http.Handle("/query", handler.GraphQL( todo.MakeExecutableSchema(todo.New()), handler.RecoverFunc(func(ctx context.Context, err interface{}) error { - log.Printf("send this panic somewhere") + // send this panic somewhere + log.Print(err) debug.PrintStack() return errors.New("user message on panic") }), diff --git a/example/todo/todo_test.go b/example/todo/todo_test.go index c7b6529c5d..9597226840 100644 --- a/example/todo/todo_test.go +++ b/example/todo/todo_test.go @@ -80,7 +80,7 @@ func TestTodo(t *testing.T) { } err := c.Post(`{ todo(id:666) { text } }`, &resp) - require.EqualError(t, err, "errors: [graphql: internal system error]") + require.EqualError(t, err, `[{"message":"internal system error","path":["todo"]}]`) }) t.Run("select all", func(t *testing.T) { diff --git a/graphql/context.go b/graphql/context.go index e5210a4e40..adfe91e41e 100644 --- a/graphql/context.go +++ b/graphql/context.go @@ -3,7 +3,6 @@ package graphql import ( "context" - "github.com/vektah/gqlgen/neelance/errors" "github.com/vektah/gqlgen/neelance/query" ) @@ -12,7 +11,7 @@ type ResolverMiddleware func(ctx context.Context, next Resolver) (res interface{ type RequestMiddleware func(ctx context.Context, next func(ctx context.Context) []byte) []byte type RequestContext struct { - errors.Builder + ErrorBuilder RawQuery string Variables map[string]interface{} @@ -49,6 +48,20 @@ type ResolverContext struct { Args map[string]interface{} // The raw field Field CollectedField + // The path of fields to get to this resolver + Path []interface{} +} + +func (r *ResolverContext) PushField(alias string) { + r.Path = append(r.Path, alias) +} + +func (r *ResolverContext) PushIndex(index int) { + r.Path = append(r.Path, index) +} + +func (r *ResolverContext) Pop() { + r.Path = r.Path[0 : len(r.Path)-1] } func GetResolverContext(ctx context.Context) *ResolverContext { @@ -61,6 +74,14 @@ func GetResolverContext(ctx context.Context) *ResolverContext { } func WithResolverContext(ctx context.Context, rc *ResolverContext) context.Context { + parent := GetResolverContext(ctx) + rc.Path = nil + if parent != nil { + rc.Path = append(rc.Path, parent.Path...) + } + if rc.Field.Alias != "" { + rc.PushField(rc.Field.Alias) + } return context.WithValue(ctx, resolver, rc) } diff --git a/graphql/error.go b/graphql/error.go index a6a5c6ea48..aafd69beaf 100644 --- a/graphql/error.go +++ b/graphql/error.go @@ -1,36 +1,49 @@ package graphql import ( - "github.com/vektah/gqlgen/neelance/errors" + "context" + "fmt" + "sync" ) -func MarshalErrors(errs []*errors.QueryError) Marshaler { - res := Array{} - for _, err := range errs { - res = append(res, MarshalError(err)) +type ErrorPresenterFunc func(context.Context, error) error + +func DefaultErrorPresenter(ctx context.Context, err error) error { + return &ResolverError{ + Message: err.Error(), + Path: GetResolverContext(ctx).Path, } - return res } -func MarshalError(err *errors.QueryError) Marshaler { - if err == nil { - return Null - } +// ResolverError is the default error type returned by ErrorPresenter. You can replace it with your own by returning +// something different from the ErrorPresenter +type ResolverError struct { + Message string `json:"message"` + Path []interface{} `json:"path,omitempty"` +} - errObj := &OrderedMap{} - errObj.Add("message", MarshalString(err.Message)) +func (r *ResolverError) Error() string { + return r.Message +} - if len(err.Locations) > 0 { - locations := Array{} - for _, location := range err.Locations { - locationObj := &OrderedMap{} - locationObj.Add("line", MarshalInt(location.Line)) - locationObj.Add("column", MarshalInt(location.Column)) +type ErrorBuilder struct { + Errors []error + // ErrorPresenter will be used to generate the error + // message from errors given to Error(). + ErrorPresenter ErrorPresenterFunc + mu sync.Mutex +} - locations = append(locations, locationObj) - } +func (c *ErrorBuilder) Errorf(ctx context.Context, format string, args ...interface{}) { + c.mu.Lock() + defer c.mu.Unlock() - errObj.Add("locations", locations) - } - return errObj + c.Errors = append(c.Errors, c.ErrorPresenter(ctx, fmt.Errorf(format, args...))) +} + +func (c *ErrorBuilder) Error(ctx context.Context, err error) { + c.mu.Lock() + defer c.mu.Unlock() + + c.Errors = append(c.Errors, c.ErrorPresenter(ctx, err)) } diff --git a/graphql/errors_test.go b/graphql/errors_test.go new file mode 100644 index 0000000000..87f3c1cb1f --- /dev/null +++ b/graphql/errors_test.go @@ -0,0 +1,50 @@ +package graphql + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestBuilder_Error(t *testing.T) { + b := ErrorBuilder{ErrorPresenter: convertErr} + b.Error(context.Background(), &testErr{"err1"}) + b.Error(context.Background(), &publicErr{ + message: "err2", + public: "err2 public", + }) + + require.Len(t, b.Errors, 2) + assert.EqualError(t, b.Errors[0], "err1") + assert.EqualError(t, b.Errors[1], "err2 public") +} + +type testErr struct { + message string +} + +func (err *testErr) Error() string { + return err.message +} + +type publicErr struct { + message string + public string +} + +func (err *publicErr) Error() string { + return err.message +} + +func (err *publicErr) PublicError() string { + return err.public +} + +func convertErr(ctx context.Context, err error) error { + if errConv, ok := err.(*publicErr); ok { + return &ResolverError{Message: errConv.public} + } + return &ResolverError{Message: err.Error()} +} diff --git a/graphql/response.go b/graphql/response.go index c09d2f0ed7..09d491b7c4 100644 --- a/graphql/response.go +++ b/graphql/response.go @@ -1,12 +1,18 @@ package graphql import ( + "context" "encoding/json" - - "github.com/vektah/gqlgen/neelance/errors" + "fmt" ) type Response struct { - Data json.RawMessage `json:"data"` - Errors []*errors.QueryError `json:"errors,omitempty"` + Data json.RawMessage `json:"data"` + Errors []error `json:"errors,omitempty"` +} + +func ErrorResponse(ctx context.Context, messagef string, args ...interface{}) *Response { + return &Response{ + Errors: []error{&ResolverError{Message: fmt.Sprintf(messagef, args...)}}, + } } diff --git a/handler/graphql.go b/handler/graphql.go index e2a6189ec8..ab79463202 100644 --- a/handler/graphql.go +++ b/handler/graphql.go @@ -21,11 +21,11 @@ type params struct { } type Config struct { - upgrader websocket.Upgrader - recover graphql.RecoverFunc - formatError func(error) string - resolverHook graphql.ResolverMiddleware - requestHook graphql.RequestMiddleware + upgrader websocket.Upgrader + recover graphql.RecoverFunc + errorPresenter graphql.ErrorPresenterFunc + resolverHook graphql.ResolverMiddleware + requestHook graphql.RequestMiddleware } type Option func(cfg *Config) @@ -42,9 +42,12 @@ func RecoverFunc(recover graphql.RecoverFunc) Option { } } -func FormatErrorFunc(f func(error) string) Option { +// ErrorPresenter transforms errors found while resolving into errors that will be returned to the user. It provides +// a good place to add any extra fields, like error.type, that might be desired by your frontend. Check the default +// implementation in graphql.DefaultErrorPresenter for an example. +func ErrorPresenter(f graphql.ErrorPresenterFunc) Option { return func(cfg *Config) { - cfg.formatError = f + cfg.errorPresenter = f } } @@ -88,7 +91,8 @@ func RequestMiddleware(middleware graphql.RequestMiddleware) Option { func GraphQL(exec graphql.ExecutableSchema, options ...Option) http.HandlerFunc { cfg := Config{ - recover: graphql.DefaultRecoverFunc, + recover: graphql.DefaultRecoverFunc, + errorPresenter: graphql.DefaultErrorPresenter, upgrader: websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, @@ -171,8 +175,8 @@ func GraphQL(exec graphql.ExecutableSchema, options ...Option) http.HandlerFunc Recover: cfg.recover, ResolverMiddleware: cfg.resolverHook, RequestMiddleware: cfg.requestHook, - Builder: errors.Builder{ - ErrorMessageFn: cfg.formatError, + ErrorBuilder: graphql.ErrorBuilder{ + ErrorPresenter: cfg.errorPresenter, }, }) @@ -202,8 +206,12 @@ func GraphQL(exec graphql.ExecutableSchema, options ...Option) http.HandlerFunc }) } -func sendError(w http.ResponseWriter, code int, errs ...*errors.QueryError) { +func sendError(w http.ResponseWriter, code int, errors ...*errors.QueryError) { w.WriteHeader(code) + var errs []error + for _, err := range errors { + errs = append(errs, err) + } b, err := json.Marshal(&graphql.Response{Errors: errs}) if err != nil { panic(err) diff --git a/handler/stub.go b/handler/stub.go index 2c7fcf1873..6378568026 100644 --- a/handler/stub.go +++ b/handler/stub.go @@ -5,7 +5,6 @@ import ( "time" "github.com/vektah/gqlgen/graphql" - "github.com/vektah/gqlgen/neelance/errors" "github.com/vektah/gqlgen/neelance/query" "github.com/vektah/gqlgen/neelance/schema" ) @@ -28,9 +27,7 @@ func (e *executableSchemaStub) Query(ctx context.Context, op *query.Operation) * } func (e *executableSchemaStub) Mutation(ctx context.Context, op *query.Operation) *graphql.Response { - return &graphql.Response{ - Errors: []*errors.QueryError{{Message: "mutations are not supported"}}, - } + return graphql.ErrorResponse(ctx, "mutations are not supported") } func (e *executableSchemaStub) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { diff --git a/handler/websocket.go b/handler/websocket.go index 92a9e59828..2b89d256ed 100644 --- a/handler/websocket.go +++ b/handler/websocket.go @@ -1,7 +1,6 @@ package handler import ( - "bytes" "context" "encoding/json" "fmt" @@ -162,8 +161,8 @@ func (c *wsConnection) subscribe(message *operationMessage) bool { Recover: c.cfg.recover, ResolverMiddleware: c.cfg.resolverHook, RequestMiddleware: c.cfg.requestHook, - Builder: errors.Builder{ - ErrorMessageFn: c.cfg.formatError, + ErrorBuilder: graphql.ErrorBuilder{ + ErrorPresenter: c.cfg.errorPresenter, }, }) @@ -218,19 +217,24 @@ func (c *wsConnection) sendData(id string, response *graphql.Response) { } func (c *wsConnection) sendError(id string, errors ...*errors.QueryError) { - writer := graphql.MarshalErrors(errors) - var b bytes.Buffer - writer.MarshalGQL(&b) - - c.write(&operationMessage{Type: errorMsg, ID: id, Payload: b.Bytes()}) + var errs []error + for _, err := range errors { + errs = append(errs, err) + } + b, err := json.Marshal(errs) + if err != nil { + panic(err) + } + c.write(&operationMessage{Type: errorMsg, ID: id, Payload: b}) } func (c *wsConnection) sendConnectionError(format string, args ...interface{}) { - writer := graphql.MarshalError(&errors.QueryError{Message: fmt.Sprintf(format, args...)}) - var b bytes.Buffer - writer.MarshalGQL(&b) + b, err := json.Marshal(&graphql.ResolverError{Message: fmt.Sprintf(format, args...)}) + if err != nil { + panic(err) + } - c.write(&operationMessage{Type: connectionErrorMsg, Payload: b.Bytes()}) + c.write(&operationMessage{Type: connectionErrorMsg, Payload: b}) } func (c *wsConnection) readOp() *operationMessage { diff --git a/neelance/errors/errors.go b/neelance/errors/errors.go index a442b8b96d..fdfa62024d 100644 --- a/neelance/errors/errors.go +++ b/neelance/errors/errors.go @@ -27,15 +27,6 @@ func Errorf(format string, a ...interface{}) *QueryError { } } -// WithMessagef is the same as Errorf, except it will store the err inside -// the ResolverError field. -func WithMessagef(err error, format string, a ...interface{}) *QueryError { - return &QueryError{ - Message: fmt.Sprintf(format, a...), - ResolverError: err, - } -} - func (err *QueryError) Error() string { if err == nil { return "" @@ -48,26 +39,3 @@ func (err *QueryError) Error() string { } var _ error = &QueryError{} - -type Builder struct { - Errors []*QueryError - // ErrorMessageFn will be used to generate the error - // message from errors given to Error(). - // - // If ErrorMessageFn is nil, err.Error() will be used. - ErrorMessageFn func(error) string -} - -func (c *Builder) Errorf(format string, args ...interface{}) { - c.Errors = append(c.Errors, Errorf(format, args...)) -} - -func (c *Builder) Error(err error) { - var gqlErrMessage string - if c.ErrorMessageFn != nil { - gqlErrMessage = c.ErrorMessageFn(err) - } else { - gqlErrMessage = err.Error() - } - c.Errors = append(c.Errors, WithMessagef(err, gqlErrMessage)) -} diff --git a/neelance/errors/errors_test.go b/neelance/errors/errors_test.go deleted file mode 100644 index 698de10ef9..0000000000 --- a/neelance/errors/errors_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package errors - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestBuilder_Error(t *testing.T) { - t.Run("with err converter", func(t *testing.T) { - b := Builder{ErrorMessageFn: convertErr} - b.Error(&testErr{"err1"}) - b.Error(&publicErr{ - message: "err2", - public: "err2 public", - }) - - require.Len(t, b.Errors, 2) - assert.EqualError(t, b.Errors[0], "graphql: err1") - assert.EqualError(t, b.Errors[1], "graphql: err2 public") - }) - t.Run("without err converter", func(t *testing.T) { - var b Builder - b.Error(&testErr{"err1"}) - b.Error(&publicErr{ - message: "err2", - public: "err2 public", - }) - - require.Len(t, b.Errors, 2) - assert.EqualError(t, b.Errors[0], "graphql: err1") - assert.EqualError(t, b.Errors[1], "graphql: err2") - }) -} - -type testErr struct { - message string -} - -func (err *testErr) Error() string { - return err.message -} - -type publicErr struct { - message string - public string -} - -func (err *publicErr) Error() string { - return err.message -} - -func (err *publicErr) PublicError() string { - return err.public -} - -func convertErr(err error) string { - if errConv, ok := err.(*publicErr); ok { - return errConv.public - } - return err.Error() -} diff --git a/test/element.go b/test/element.go new file mode 100644 index 0000000000..860109e6b1 --- /dev/null +++ b/test/element.go @@ -0,0 +1,5 @@ +package test + +type Element struct { + ID int +} diff --git a/test/resolvers_test.go b/test/resolvers_test.go index edf119e226..5891cdf34b 100644 --- a/test/resolvers_test.go +++ b/test/resolvers_test.go @@ -5,82 +5,56 @@ package test import ( "context" fmt "fmt" + "net/http/httptest" "testing" + "time" "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" + "github.com/vektah/gqlgen/client" "github.com/vektah/gqlgen/graphql" - gqlerrors "github.com/vektah/gqlgen/neelance/errors" - "github.com/vektah/gqlgen/neelance/query" + "github.com/vektah/gqlgen/handler" "github.com/vektah/gqlgen/test/introspection" invalid_identifier "github.com/vektah/gqlgen/test/invalid-identifier" "github.com/vektah/gqlgen/test/models" ) -func TestCompiles(t *testing.T) {} - -func TestErrorConverter(t *testing.T) { +func TestCustomErrorPresenter(t *testing.T) { resolvers := &testResolvers{} - s := MakeExecutableSchema(resolvers) - - doc, errs := query.Parse(`query { nestedOutputs { inner { id } } } `) - require.Nil(t, errs) - - t.Run("with", func(t *testing.T) { - testConvErr := func(e error) string { + srv := httptest.NewServer(handler.GraphQL(MakeExecutableSchema(resolvers), + handler.ErrorPresenter(func(i context.Context, e error) error { if _, ok := errors.Cause(e).(*specialErr); ok { - return "override special error message" + return &graphql.ResolverError{Message: "override special error message"} } - return e.Error() - } - t.Run("special error", func(t *testing.T) { - resolvers.nestedOutputsErr = &specialErr{} - - resp := s.Query(mkctx(doc, testConvErr), doc.Operations[0]) - require.Len(t, resp.Errors, 1) - assert.Equal(t, "override special error message", resp.Errors[0].Message) - }) - t.Run("normal error", func(t *testing.T) { - resolvers.nestedOutputsErr = fmt.Errorf("a normal error") - - resp := s.Query(mkctx(doc, testConvErr), doc.Operations[0]) - require.Len(t, resp.Errors, 1) - assert.Equal(t, "a normal error", resp.Errors[0].Message) - }) + return &graphql.ResolverError{Message: e.Error()} + }), + )) + c := client.New(srv.URL) + + t.Run("special error", func(t *testing.T) { + resolvers.nestedOutputsErr = &specialErr{} + var resp struct{} + err := c.Post(`query { nestedOutputs { inner { id } } }`, &resp) + + assert.EqualError(t, err, `[{"message":"override special error message"}]`) }) + t.Run("normal error", func(t *testing.T) { + resolvers.nestedOutputsErr = fmt.Errorf("a normal error") + var resp struct{} + err := c.Post(`query { nestedOutputs { inner { id } } }`, &resp) - t.Run("without", func(t *testing.T) { - t.Run("special error", func(t *testing.T) { - resolvers.nestedOutputsErr = &specialErr{} - - resp := s.Query(mkctx(doc, nil), doc.Operations[0]) - require.Len(t, resp.Errors, 1) - assert.Equal(t, "original special error message", resp.Errors[0].Message) - }) - t.Run("normal error", func(t *testing.T) { - resolvers.nestedOutputsErr = fmt.Errorf("a normal error") - - resp := s.Query(mkctx(doc, nil), doc.Operations[0]) - require.Len(t, resp.Errors, 1) - assert.Equal(t, "a normal error", resp.Errors[0].Message) - }) + assert.EqualError(t, err, `[{"message":"a normal error"}]`) }) } -func mkctx(doc *query.Document, errFn func(e error) string) context.Context { - return graphql.WithRequestContext(context.Background(), &graphql.RequestContext{ - Doc: doc, - ResolverMiddleware: func(ctx context.Context, next graphql.Resolver) (res interface{}, err error) { - return next(ctx) - }, - RequestMiddleware: func(ctx context.Context, next func(ctx context.Context) []byte) []byte { - return next(ctx) - }, - Builder: gqlerrors.Builder{ - ErrorMessageFn: errFn, - }, - }) +func TestErrorPath(t *testing.T) { + srv := httptest.NewServer(handler.GraphQL(MakeExecutableSchema(&testResolvers{}))) + c := client.New(srv.URL) + + var resp struct{} + err := c.Post(`{ path { cc:child { error(message: "boom") } } }`, &resp) + + assert.EqualError(t, err, `[{"message":"boom","path":["path",0,"cc","error"]},{"message":"boom","path":["path",1,"cc","error"]},{"message":"boom","path":["path",2,"cc","error"]},{"message":"boom","path":["path",3,"cc","error"]}]`) } type testResolvers struct { @@ -125,6 +99,24 @@ func (r *testResolvers) Query_invalidIdentifier(ctx context.Context) (*invalid_i return r.invalidIdentifier, nil } +func (r *testResolvers) Query_path(ctx context.Context) ([]Element, error) { + return []Element{{1}, {2}, {3}, {4}}, nil +} + +func (r *testResolvers) Element_child(ctx context.Context, obj *Element) (Element, error) { + return Element{obj.ID * 10}, nil +} + +func (r *testResolvers) Element_error(ctx context.Context, obj *Element, message *string) (bool, error) { + // A silly hack to make the result order stable + time.Sleep(time.Duration(obj.ID) * 10 * time.Millisecond) + + if message != nil { + return true, errors.New(*message) + } + return false, nil +} + type specialErr struct{} func (*specialErr) Error() string { diff --git a/test/schema.graphql b/test/schema.graphql index 52d9c475a4..3bd64cb659 100644 --- a/test/schema.graphql +++ b/test/schema.graphql @@ -48,6 +48,11 @@ type InvalidIdentifier { id: Int! } +type Element { + child: Element! + error(message: String): Boolean! +} + type Query { nestedInputs(input: [[OuterInput]] = [[{inner: {id: 1}}]]): Boolean nestedOutputs: [[OuterObject]] @@ -56,4 +61,5 @@ type Query { mapInput(input: Changes): Boolean collision: It invalidIdentifier: InvalidIdentifier + path: [Element] } diff --git a/test/types.json b/test/types.json index 58035934ff..6d14290bb6 100644 --- a/test/types.json +++ b/test/types.json @@ -6,5 +6,6 @@ "RecursiveInputSlice": "github.com/vektah/gqlgen/test.RecursiveInputSlice", "It": "github.com/vektah/gqlgen/test/introspection.It", "Changes": "map[string]interface{}", - "InvalidIdentifier": "github.com/vektah/gqlgen/test/invalid-identifier.InvalidIdentifier" + "InvalidIdentifier": "github.com/vektah/gqlgen/test/invalid-identifier.InvalidIdentifier", + "Element": "github.com/vektah/gqlgen/test.Element" } From 4bdc1e1f2a9f6442e65c6e0115d576dbc6566147 Mon Sep 17 00:00:00 2001 From: Adam Scarr Date: Fri, 27 Apr 2018 16:53:57 +1000 Subject: [PATCH 2/2] regenerate --- codegen/templates/data.go | 8 +- example/chat/generated.go | 364 +++++++++++++-- example/dataloader/generated.go | 446 +++++++++++++++--- example/scalars/generated.go | 399 ++++++++++++++-- example/selection/generated.go | 364 ++++++++++++++- example/starwars/generated.go | 803 +++++++++++++++++++++++++------- example/todo/generated.go | 390 +++++++++++++--- test/generated.go | 643 +++++++++++++++++++++---- 8 files changed, 2948 insertions(+), 469 deletions(-) diff --git a/codegen/templates/data.go b/codegen/templates/data.go index c7b2f380d3..72f211f265 100644 --- a/codegen/templates/data.go +++ b/codegen/templates/data.go @@ -1,11 +1,11 @@ package templates var data = map[string]string{ - "args.gotpl": "\t{{- if . }}args := map[string]interface{}{} {{end}}\n\t{{- range $i, $arg := . }}\n\t\tvar arg{{$i}} {{$arg.Signature }}\n\t\tif tmp, ok := field.Args[{{$arg.GQLName|quote}}]; ok {\n\t\t\tvar err error\n\t\t\t{{$arg.Unmarshal (print \"arg\" $i) \"tmp\" }}\n\t\t\tif err != nil {\n\t\t\t\tec.Error(err)\n\t\t\t\t{{- if $arg.Object.Stream }}\n\t\t\t\t\treturn nil\n\t\t\t\t{{- else }}\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t{{- end }}\n\t\t\t}\n\t\t} {{ if $arg.Default }} else {\n\t\t\tvar tmp interface{} = {{ $arg.Default | dump }}\n\t\t\tvar err error\n\t\t\t{{$arg.Unmarshal (print \"arg\" $i) \"tmp\" }}\n\t\t\tif err != nil {\n\t\t\t\tec.Error(err)\n\t\t\t\t{{- if $arg.Object.Stream }}\n\t\t\t\t\treturn nil\n\t\t\t\t{{- else }}\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t{{- end }}\n\t\t\t}\n\t\t}\n\t\t{{end }}\n\t\targs[{{$arg.GQLName|quote}}] = arg{{$i}}\n\t{{- end -}}\n", - "field.gotpl": "{{ $field := . }}\n{{ $object := $field.Object }}\n\n{{- if $object.Stream }}\n\tfunc (ec *executionContext) _{{$object.GQLType}}_{{$field.GQLName}}(ctx context.Context, field graphql.CollectedField) func() graphql.Marshaler {\n\t\t{{- template \"args.gotpl\" $field.Args }}\n\t\trctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field})\n\t\tresults, err := ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }})\n\t\tif err != nil {\n\t\t\tec.Error(err)\n\t\t\treturn nil\n\t\t}\n\t\treturn func() graphql.Marshaler {\n\t\t\tres, ok := <-results\n\t\t\tif !ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tvar out graphql.OrderedMap\n\t\t\tout.Add(field.Alias, func() graphql.Marshaler { {{ $field.WriteJson }} }())\n\t\t\treturn &out\n\t\t}\n\t}\n{{ else }}\n\tfunc (ec *executionContext) _{{$object.GQLType}}_{{$field.GQLName}}(ctx context.Context, field graphql.CollectedField, {{if not $object.Root}}obj *{{$object.FullName}}{{end}}) graphql.Marshaler {\n\t\t{{- template \"args.gotpl\" $field.Args }}\n\n\t\t{{- if $field.IsConcurrent }}\n\t\t\treturn graphql.Defer(func() (ret graphql.Marshaler) {\n\t\t\t\tdefer func() {\n\t\t\t\t\tif r := recover(); r != nil {\n\t\t\t\t\t\tuserErr := ec.Recover(ctx, r)\n\t\t\t\t\t\tec.Error(userErr)\n\t\t\t\t\t\tret = graphql.Null\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t{{- end }}\n\n\t\t\t{{- if $field.GoVarName }}\n\t\t\t\tres := obj.{{$field.GoVarName}}\n\t\t\t{{- else if $field.GoMethodName }}\n\t\t\t\t{{- if $field.NoErr }}\n\t\t\t\t\tres := {{$field.GoMethodName}}({{ $field.CallArgs }})\n\t\t\t\t{{- else }}\n\t\t\t\t\tres, err := {{$field.GoMethodName}}({{ $field.CallArgs }})\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tec.Error(err)\n\t\t\t\t\t\treturn graphql.Null\n\t\t\t\t\t}\n\t\t\t\t{{- end }}\n\t\t\t{{- else }}\n\t\t\t\trctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{\n\t\t\t\t\tObject: {{$object.GQLType|quote}},\n\t\t\t\t\tArgs: {{if $field.Args }}args{{else}}nil{{end}},\n\t\t\t\t\tField: field,\n\t\t\t\t})\n\t\t\t\tresTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) {\n\t\t\t\t\treturn ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }})\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\tec.Error(err)\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t}\n\t\t\t\tif resTmp == nil {\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t}\n\t\t\t\tres := resTmp.({{$field.Signature}})\n\t\t\t{{- end }}\n\t\t\t{{ $field.WriteJson }}\n\t\t{{- if $field.IsConcurrent }}\n\t\t\t})\n\t\t{{- end }}\n\t}\n{{ end }}\n", - "generated.gotpl": "// This file was generated by github.com/vektah/gqlgen, DO NOT EDIT\n\npackage {{ .PackageName }}\n\nimport (\n{{- range $import := .Imports }}\n\t{{- $import.Write }}\n{{ end }}\n)\n\nfunc MakeExecutableSchema(resolvers Resolvers) graphql.ExecutableSchema {\n\treturn &executableSchema{resolvers: resolvers}\n}\n\ntype Resolvers interface {\n{{- range $object := .Objects -}}\n\t{{ range $field := $object.Fields -}}\n\t\t{{ $field.ResolverDeclaration }}\n\t{{ end }}\n{{- end }}\n}\n\ntype executableSchema struct {\n\tresolvers Resolvers\n}\n\nfunc (e *executableSchema) Schema() *schema.Schema {\n\treturn parsedSchema\n}\n\nfunc (e *executableSchema) Query(ctx context.Context, op *query.Operation) *graphql.Response {\n\t{{- if .QueryRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\tdata := ec._{{.QueryRoot.GQLType}}(ctx, op.Selections)\n\t\t\tvar buf bytes.Buffer\n\t\t\tdata.MarshalGQL(&buf)\n\t\t\treturn buf.Bytes()\n\t\t})\n\n\t\treturn &graphql.Response{\n\t\t\tData: buf,\n\t\t\tErrors: ec.Errors,\n\t\t}\n\t{{- else }}\n\t\treturn &graphql.Response{Errors: []*errors.QueryError{ {Message: \"queries are not supported\"} }}\n\t{{- end }}\n}\n\nfunc (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response {\n\t{{- if .MutationRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\tdata := ec._{{.MutationRoot.GQLType}}(ctx, op.Selections)\n\t\t\tvar buf bytes.Buffer\n\t\t\tdata.MarshalGQL(&buf)\n\t\t\treturn buf.Bytes()\n\t\t})\n\n\t\treturn &graphql.Response{\n\t\t\tData: buf,\n\t\t\tErrors: ec.Errors,\n\t\t}\n\t{{- else }}\n\t\treturn &graphql.Response{Errors: []*errors.QueryError{ {Message: \"mutations are not supported\"} }}\n\t{{- end }}\n}\n\nfunc (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response {\n\t{{- if .SubscriptionRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tnext := ec._{{.SubscriptionRoot.GQLType}}(ctx, op.Selections)\n\t\tif ec.Errors != nil {\n\t\t\treturn graphql.OneShot(&graphql.Response{Data: []byte(\"null\"), Errors: ec.Errors})\n\t\t}\n\n\t\tvar buf bytes.Buffer\n\t\treturn func() *graphql.Response {\n\t\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\t\tbuf.Reset()\n\t\t\t\tdata := next()\n\n\t\t\t\tif data == nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tdata.MarshalGQL(&buf)\n\t\t\t\treturn buf.Bytes()\n\t\t\t})\n\n\t\t\treturn &graphql.Response{\n\t\t\t\tData: buf,\n\t\t\t\tErrors: ec.Errors,\n\t\t\t}\n\t\t}\n\t{{- else }}\n\t\treturn graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{ {Message: \"subscriptions are not supported\"} }})\n\t{{- end }}\n}\n\ntype executionContext struct {\n\t*graphql.RequestContext\n\n\tresolvers Resolvers\n}\n\n{{- range $object := .Objects }}\n\t{{ template \"object.gotpl\" $object }}\n\n\t{{- range $field := $object.Fields }}\n\t\t{{ template \"field.gotpl\" $field }}\n\t{{ end }}\n{{- end}}\n\n{{- range $interface := .Interfaces }}\n\t{{ template \"interface.gotpl\" $interface }}\n{{- end }}\n\n{{- range $input := .Inputs }}\n\t{{ template \"input.gotpl\" $input }}\n{{- end }}\n\nfunc (ec *executionContext) introspectSchema() *introspection.Schema {\n\treturn introspection.WrapSchema(parsedSchema)\n}\n\nfunc (ec *executionContext) introspectType(name string) *introspection.Type {\n\tt := parsedSchema.Resolve(name)\n\tif t == nil {\n\t\treturn nil\n\t}\n\treturn introspection.WrapType(t)\n}\n\nvar parsedSchema = schema.MustParse({{.SchemaRaw|rawQuote}})\n", + "args.gotpl": "\t{{- if . }}args := map[string]interface{}{} {{end}}\n\t{{- range $i, $arg := . }}\n\t\tvar arg{{$i}} {{$arg.Signature }}\n\t\tif tmp, ok := field.Args[{{$arg.GQLName|quote}}]; ok {\n\t\t\tvar err error\n\t\t\t{{$arg.Unmarshal (print \"arg\" $i) \"tmp\" }}\n\t\t\tif err != nil {\n\t\t\t\tec.Error(ctx, err)\n\t\t\t\t{{- if $arg.Object.Stream }}\n\t\t\t\t\treturn nil\n\t\t\t\t{{- else }}\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t{{- end }}\n\t\t\t}\n\t\t} {{ if $arg.Default }} else {\n\t\t\tvar tmp interface{} = {{ $arg.Default | dump }}\n\t\t\tvar err error\n\t\t\t{{$arg.Unmarshal (print \"arg\" $i) \"tmp\" }}\n\t\t\tif err != nil {\n\t\t\t\tec.Error(ctx, err)\n\t\t\t\t{{- if $arg.Object.Stream }}\n\t\t\t\t\treturn nil\n\t\t\t\t{{- else }}\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t{{- end }}\n\t\t\t}\n\t\t}\n\t\t{{end }}\n\t\targs[{{$arg.GQLName|quote}}] = arg{{$i}}\n\t{{- end -}}\n", + "field.gotpl": "{{ $field := . }}\n{{ $object := $field.Object }}\n\n{{- if $object.Stream }}\n\tfunc (ec *executionContext) _{{$object.GQLType}}_{{$field.GQLName}}(ctx context.Context, field graphql.CollectedField) func() graphql.Marshaler {\n\t\t{{- template \"args.gotpl\" $field.Args }}\n\t\tctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field})\n\t\tresults, err := ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }})\n\t\tif err != nil {\n\t\t\tec.Error(ctx, err)\n\t\t\treturn nil\n\t\t}\n\t\treturn func() graphql.Marshaler {\n\t\t\tres, ok := <-results\n\t\t\tif !ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tvar out graphql.OrderedMap\n\t\t\tout.Add(field.Alias, func() graphql.Marshaler { {{ $field.WriteJson }} }())\n\t\t\treturn &out\n\t\t}\n\t}\n{{ else }}\n\tfunc (ec *executionContext) _{{$object.GQLType}}_{{$field.GQLName}}(ctx context.Context, field graphql.CollectedField, {{if not $object.Root}}obj *{{$object.FullName}}{{end}}) graphql.Marshaler {\n\t\t{{- template \"args.gotpl\" $field.Args }}\n\n\t\t{{- if $field.IsConcurrent }}\n\t\t\tctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{\n\t\t\t\tObject: {{$object.GQLType|quote}},\n\t\t\t\tArgs: {{if $field.Args }}args{{else}}nil{{end}},\n\t\t\t\tField: field,\n\t\t\t})\n\t\t\treturn graphql.Defer(func() (ret graphql.Marshaler) {\n\t\t\t\tdefer func() {\n\t\t\t\t\tif r := recover(); r != nil {\n\t\t\t\t\t\tuserErr := ec.Recover(ctx, r)\n\t\t\t\t\t\tec.Error(ctx, userErr)\n\t\t\t\t\t\tret = graphql.Null\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t{{ else }}\n\t\t\trctx := graphql.GetResolverContext(ctx)\n\t\t\trctx.Object = {{$object.GQLType|quote}}\n\t\t\trctx.Args = {{if $field.Args }}args{{else}}nil{{end}}\n\t\t\trctx.Field = field\n\t\t\trctx.PushField(field.Alias)\n\t\t\tdefer rctx.Pop()\n\t\t{{- end }}\n\n\t\t\t{{- if $field.GoVarName }}\n\t\t\t\tres := obj.{{$field.GoVarName}}\n\t\t\t{{- else if $field.GoMethodName }}\n\t\t\t\t{{- if $field.NoErr }}\n\t\t\t\t\tres := {{$field.GoMethodName}}({{ $field.CallArgs }})\n\t\t\t\t{{- else }}\n\t\t\t\t\tres, err := {{$field.GoMethodName}}({{ $field.CallArgs }})\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tec.Error(ctx, err)\n\t\t\t\t\t\treturn graphql.Null\n\t\t\t\t\t}\n\t\t\t\t{{- end }}\n\t\t\t{{- else }}\n\n\t\t\t\tresTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) {\n\t\t\t\t\treturn ec.resolvers.{{ $object.GQLType }}_{{ $field.GQLName }}({{ $field.CallArgs }})\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\tec.Error(ctx, err)\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t}\n\t\t\t\tif resTmp == nil {\n\t\t\t\t\treturn graphql.Null\n\t\t\t\t}\n\t\t\t\tres := resTmp.({{$field.Signature}})\n\t\t\t{{- end }}\n\t\t\t{{ $field.WriteJson }}\n\t\t{{- if $field.IsConcurrent }}\n\t\t\t})\n\t\t{{- end }}\n\t}\n{{ end }}\n", + "generated.gotpl": "// This file was generated by github.com/vektah/gqlgen, DO NOT EDIT\n\npackage {{ .PackageName }}\n\nimport (\n{{- range $import := .Imports }}\n\t{{- $import.Write }}\n{{ end }}\n)\n\nfunc MakeExecutableSchema(resolvers Resolvers) graphql.ExecutableSchema {\n\treturn &executableSchema{resolvers: resolvers}\n}\n\ntype Resolvers interface {\n{{- range $object := .Objects -}}\n\t{{ range $field := $object.Fields -}}\n\t\t{{ $field.ResolverDeclaration }}\n\t{{ end }}\n{{- end }}\n}\n\ntype executableSchema struct {\n\tresolvers Resolvers\n}\n\nfunc (e *executableSchema) Schema() *schema.Schema {\n\treturn parsedSchema\n}\n\nfunc (e *executableSchema) Query(ctx context.Context, op *query.Operation) *graphql.Response {\n\t{{- if .QueryRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\tdata := ec._{{.QueryRoot.GQLType}}(ctx, op.Selections)\n\t\t\tvar buf bytes.Buffer\n\t\t\tdata.MarshalGQL(&buf)\n\t\t\treturn buf.Bytes()\n\t\t})\n\n\t\treturn &graphql.Response{\n\t\t\tData: buf,\n\t\t\tErrors: ec.Errors,\n\t\t}\n\t{{- else }}\n\t\treturn graphql.ErrorResponse(ctx, \"queries are not supported\")\n\t{{- end }}\n}\n\nfunc (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response {\n\t{{- if .MutationRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\tdata := ec._{{.MutationRoot.GQLType}}(ctx, op.Selections)\n\t\t\tvar buf bytes.Buffer\n\t\t\tdata.MarshalGQL(&buf)\n\t\t\treturn buf.Bytes()\n\t\t})\n\n\t\treturn &graphql.Response{\n\t\t\tData: buf,\n\t\t\tErrors: ec.Errors,\n\t\t}\n\t{{- else }}\n\t\treturn graphql.ErrorResponse(ctx, \"mutations are not supported\")\n\t{{- end }}\n}\n\nfunc (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response {\n\t{{- if .SubscriptionRoot }}\n\t\tec := executionContext{graphql.GetRequestContext(ctx), e.resolvers}\n\n\t\tnext := ec._{{.SubscriptionRoot.GQLType}}(ctx, op.Selections)\n\t\tif ec.Errors != nil {\n\t\t\treturn graphql.OneShot(&graphql.Response{Data: []byte(\"null\"), Errors: ec.Errors})\n\t\t}\n\n\t\tvar buf bytes.Buffer\n\t\treturn func() *graphql.Response {\n\t\t\tbuf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {\n\t\t\t\tbuf.Reset()\n\t\t\t\tdata := next()\n\n\t\t\t\tif data == nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tdata.MarshalGQL(&buf)\n\t\t\t\treturn buf.Bytes()\n\t\t\t})\n\n\t\t\treturn &graphql.Response{\n\t\t\t\tData: buf,\n\t\t\t\tErrors: ec.Errors,\n\t\t\t}\n\t\t}\n\t{{- else }}\n\t\treturn graphql.OneShot(graphql.ErrorResponse(ctx, \"subscriptions are not supported\"))\n\t{{- end }}\n}\n\ntype executionContext struct {\n\t*graphql.RequestContext\n\n\tresolvers Resolvers\n}\n\n{{- range $object := .Objects }}\n\t{{ template \"object.gotpl\" $object }}\n\n\t{{- range $field := $object.Fields }}\n\t\t{{ template \"field.gotpl\" $field }}\n\t{{ end }}\n{{- end}}\n\n{{- range $interface := .Interfaces }}\n\t{{ template \"interface.gotpl\" $interface }}\n{{- end }}\n\n{{- range $input := .Inputs }}\n\t{{ template \"input.gotpl\" $input }}\n{{- end }}\n\nfunc (ec *executionContext) introspectSchema() *introspection.Schema {\n\treturn introspection.WrapSchema(parsedSchema)\n}\n\nfunc (ec *executionContext) introspectType(name string) *introspection.Type {\n\tt := parsedSchema.Resolve(name)\n\tif t == nil {\n\t\treturn nil\n\t}\n\treturn introspection.WrapType(t)\n}\n\nvar parsedSchema = schema.MustParse({{.SchemaRaw|rawQuote}})\n", "input.gotpl": "\t{{- if .IsMarshaled }}\n\tfunc Unmarshal{{ .GQLType }}(v interface{}) ({{.FullName}}, error) {\n\t\tvar it {{.FullName}}\n\n\t\tfor k, v := range v.(map[string]interface{}) {\n\t\t\tswitch k {\n\t\t\t{{- range $field := .Fields }}\n\t\t\tcase {{$field.GQLName|quote}}:\n\t\t\t\tvar err error\n\t\t\t\t{{ $field.Unmarshal (print \"it.\" $field.GoVarName) \"v\" }}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn it, err\n\t\t\t\t}\n\t\t\t{{- end }}\n\t\t\t}\n\t\t}\n\n\t\treturn it, nil\n\t}\n\t{{- end }}\n", "interface.gotpl": "{{- $interface := . }}\n\nfunc (ec *executionContext) _{{$interface.GQLType}}(ctx context.Context, sel []query.Selection, obj *{{$interface.FullName}}) graphql.Marshaler {\n\tswitch obj := (*obj).(type) {\n\tcase nil:\n\t\treturn graphql.Null\n\t{{- range $implementor := $interface.Implementors }}\n\t\t{{- if $implementor.ValueReceiver }}\n\t\t\tcase {{$implementor.FullName}}:\n\t\t\t\treturn ec._{{$implementor.GQLType}}(ctx, sel, &obj)\n\t\t{{- end}}\n\t\tcase *{{$implementor.FullName}}:\n\t\t\treturn ec._{{$implementor.GQLType}}(ctx, sel, obj)\n\t{{- end }}\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unexpected type %T\", obj))\n\t}\n}\n", "models.gotpl": "// This file was generated by github.com/vektah/gqlgen, DO NOT EDIT\n\npackage {{ .PackageName }}\n\nimport (\n{{- range $import := .Imports }}\n\t{{- $import.Write }}\n{{ end }}\n)\n\n{{ range $model := .Models }}\n\t{{- if .IsInterface }}\n\t\ttype {{.GoType}} interface {}\n\t{{- else }}\n\t\ttype {{.GoType}} struct {\n\t\t\t{{- range $field := .Fields }}\n\t\t\t\t{{- if $field.GoVarName }}\n\t\t\t\t\t{{ $field.GoVarName }} {{$field.Signature}}\n\t\t\t\t{{- else }}\n\t\t\t\t\t{{ $field.GoFKName }} {{$field.GoFKType}}\n\t\t\t\t{{- end }}\n\t\t\t{{- end }}\n\t\t}\n\t{{- end }}\n{{- end}}\n\n{{ range $enum := .Enums }}\n\ttype {{.GoType}} string\n\tconst (\n\t{{ range $value := .Values }}\n\t\t{{$enum.GoType}}{{ .Name|toCamel }} {{$enum.GoType}} = {{.Name|quote}} {{with .Description}} // {{.}} {{end}}\n\t{{- end }}\n\t)\n\n\tfunc (e {{.GoType}}) IsValid() bool {\n\t\tswitch e {\n\t\tcase {{ range $index, $element := .Values}}{{if $index}},{{end}}{{ $enum.GoType }}{{ $element.Name|toCamel }}{{end}}:\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\tfunc (e {{.GoType}}) String() string {\n\t\treturn string(e)\n\t}\n\n\tfunc (e *{{.GoType}}) UnmarshalGQL(v interface{}) error {\n\t\tstr, ok := v.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"enums must be strings\")\n\t\t}\n\n\t\t*e = {{.GoType}}(str)\n\t\tif !e.IsValid() {\n\t\t\treturn fmt.Errorf(\"%s is not a valid {{.GQLType}}\", str)\n\t\t}\n\t\treturn nil\n\t}\n\n\tfunc (e {{.GoType}}) MarshalGQL(w io.Writer) {\n\t\tfmt.Fprint(w, strconv.Quote(e.String()))\n\t}\n\n{{- end }}\n", - "object.gotpl": "{{ $object := . }}\n\nvar {{ $object.GQLType|lcFirst}}Implementors = {{$object.Implementors}}\n\n// nolint: gocyclo, errcheck, gas, goconst\n{{- if .Stream }}\nfunc (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection) func() graphql.Marshaler {\n\tfields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables)\n\n\tif len(fields) != 1 {\n\t\tec.Errorf(\"must subscribe to exactly one stream\")\n\t\treturn nil\n\t}\n\n\tswitch fields[0].Name {\n\t{{- range $field := $object.Fields }}\n\tcase \"{{$field.GQLName}}\":\n\t\treturn ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, fields[0])\n\t{{- end }}\n\tdefault:\n\t\tpanic(\"unknown field \" + strconv.Quote(fields[0].Name))\n\t}\n}\n{{- else }}\nfunc (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection{{if not $object.Root}}, obj *{{$object.FullName}} {{end}}) graphql.Marshaler {\n\tfields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables)\n\tout := graphql.NewOrderedMap(len(fields))\n\tfor i, field := range fields {\n\t\tout.Keys[i] = field.Alias\n\n\t\tswitch field.Name {\n\t\tcase \"__typename\":\n\t\t\tout.Values[i] = graphql.MarshalString({{$object.GQLType|quote}})\n\t\t{{- range $field := $object.Fields }}\n\t\tcase \"{{$field.GQLName}}\":\n\t\t\tout.Values[i] = ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, field{{if not $object.Root}}, obj{{end}})\n\t\t{{- end }}\n\t\tdefault:\n\t\t\tpanic(\"unknown field \" + strconv.Quote(field.Name))\n\t\t}\n\t}\n\n\treturn out\n}\n{{- end }}\n", + "object.gotpl": "{{ $object := . }}\n\nvar {{ $object.GQLType|lcFirst}}Implementors = {{$object.Implementors}}\n\n// nolint: gocyclo, errcheck, gas, goconst\n{{- if .Stream }}\nfunc (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection) func() graphql.Marshaler {\n\tfields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables)\n\tctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{\n\t\tObject: {{$object.GQLType|quote}},\n\t})\n\tif len(fields) != 1 {\n\t\tec.Errorf(ctx, \"must subscribe to exactly one stream\")\n\t\treturn nil\n\t}\n\n\tswitch fields[0].Name {\n\t{{- range $field := $object.Fields }}\n\tcase \"{{$field.GQLName}}\":\n\t\treturn ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, fields[0])\n\t{{- end }}\n\tdefault:\n\t\tpanic(\"unknown field \" + strconv.Quote(fields[0].Name))\n\t}\n}\n{{- else }}\nfunc (ec *executionContext) _{{$object.GQLType}}(ctx context.Context, sel []query.Selection{{if not $object.Root}}, obj *{{$object.FullName}} {{end}}) graphql.Marshaler {\n\tfields := graphql.CollectFields(ec.Doc, sel, {{$object.GQLType|lcFirst}}Implementors, ec.Variables)\n\t{{if $object.Root}}\n\t\tctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{\n\t\t\tObject: {{$object.GQLType|quote}},\n\t\t})\n\t{{end}}\n\tout := graphql.NewOrderedMap(len(fields))\n\tfor i, field := range fields {\n\t\tout.Keys[i] = field.Alias\n\n\t\tswitch field.Name {\n\t\tcase \"__typename\":\n\t\t\tout.Values[i] = graphql.MarshalString({{$object.GQLType|quote}})\n\t\t{{- range $field := $object.Fields }}\n\t\tcase \"{{$field.GQLName}}\":\n\t\t\tout.Values[i] = ec._{{$object.GQLType}}_{{$field.GQLName}}(ctx, field{{if not $object.Root}}, obj{{end}})\n\t\t{{- end }}\n\t\tdefault:\n\t\t\tpanic(\"unknown field \" + strconv.Quote(field.Name))\n\t\t}\n\t}\n\n\treturn out\n}\n{{- end }}\n", } diff --git a/example/chat/generated.go b/example/chat/generated.go index c0049c2dbb..20ca498776 100644 --- a/example/chat/generated.go +++ b/example/chat/generated.go @@ -103,6 +103,7 @@ var chatroomImplementors = []string{"Chatroom"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Chatroom(ctx context.Context, sel []query.Selection, obj *Chatroom) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, chatroomImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -123,15 +124,32 @@ func (ec *executionContext) _Chatroom(ctx context.Context, sel []query.Selection } func (ec *executionContext) _Chatroom_name(ctx context.Context, field graphql.CollectedField, obj *Chatroom) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Chatroom" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } func (ec *executionContext) _Chatroom_messages(ctx context.Context, field graphql.CollectedField, obj *Chatroom) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Chatroom" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Messages arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Message(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Message(ctx, field.Selections, &res[idx1]) + }()) } return arr1 } @@ -141,6 +159,7 @@ var messageImplementors = []string{"Message"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Message(ctx context.Context, sel []query.Selection, obj *Message) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, messageImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -165,21 +184,45 @@ func (ec *executionContext) _Message(ctx context.Context, sel []query.Selection, } func (ec *executionContext) _Message_id(ctx context.Context, field graphql.CollectedField, obj *Message) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Message" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalID(res) } func (ec *executionContext) _Message_text(ctx context.Context, field graphql.CollectedField, obj *Message) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Message" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Text return graphql.MarshalString(res) } func (ec *executionContext) _Message_createdBy(ctx context.Context, field graphql.CollectedField, obj *Message) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Message" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.CreatedBy return graphql.MarshalString(res) } func (ec *executionContext) _Message_createdAt(ctx context.Context, field graphql.CollectedField, obj *Message) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Message" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.CreatedAt return graphql.MarshalTime(res) } @@ -189,6 +232,11 @@ var mutationImplementors = []string{"Mutation"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Mutation(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, mutationImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Mutation", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -213,7 +261,7 @@ func (ec *executionContext) _Mutation_post(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -223,7 +271,7 @@ func (ec *executionContext) _Mutation_post(ctx context.Context, field graphql.Co var err error arg1, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -233,21 +281,23 @@ func (ec *executionContext) _Mutation_post(ctx context.Context, field graphql.Co var err error arg2, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["roomName"] = arg2 - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Mutation", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Mutation_post(rctx, args["text"].(string), args["username"].(string), args["roomName"].(string)) + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Mutation" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Mutation_post(ctx, args["text"].(string), args["username"].(string), args["roomName"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -262,6 +312,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -290,29 +345,30 @@ func (ec *executionContext) _Query_room(ctx context.Context, field graphql.Colle var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_room(rctx, args["name"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_room(ctx, args["name"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -327,6 +383,12 @@ func (ec *executionContext) _Query_room(ctx context.Context, field graphql.Colle } func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -341,11 +403,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -358,9 +426,11 @@ var subscriptionImplementors = []string{"Subscription"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Subscription(ctx context.Context, sel []query.Selection) func() graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, subscriptionImplementors, ec.Variables) - + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Subscription", + }) if len(fields) != 1 { - ec.Errorf("must subscribe to exactly one stream") + ec.Errorf(ctx, "must subscribe to exactly one stream") return nil } @@ -379,15 +449,15 @@ func (ec *executionContext) _Subscription_messageAdded(ctx context.Context, fiel var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return nil } } args["roomName"] = arg0 - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field}) - results, err := ec.resolvers.Subscription_messageAdded(rctx, args["roomName"].(string)) + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{Field: field}) + results, err := ec.resolvers.Subscription_messageAdded(ctx, args["roomName"].(string)) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return nil } return func() graphql.Marshaler { @@ -406,6 +476,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -430,11 +501,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -443,19 +526,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -470,6 +573,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -494,11 +598,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -507,11 +623,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -524,6 +652,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -552,11 +681,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -565,10 +706,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -579,6 +729,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -587,11 +743,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -604,6 +772,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -628,11 +797,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -641,6 +822,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -649,6 +836,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -661,6 +854,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -687,10 +881,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -701,6 +904,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -709,6 +918,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -717,6 +932,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -725,10 +946,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -743,6 +973,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -777,11 +1008,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -790,6 +1033,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -804,15 +1053,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -823,10 +1081,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -837,10 +1104,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -857,15 +1133,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -876,10 +1161,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -890,6 +1184,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/example/dataloader/generated.go b/example/dataloader/generated.go index d2ca6c1d14..0b0b4d87e7 100644 --- a/example/dataloader/generated.go +++ b/example/dataloader/generated.go @@ -8,7 +8,6 @@ import ( strconv "strconv" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -52,11 +51,11 @@ func (e *executableSchema) Query(ctx context.Context, op *query.Operation) *grap } func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response { - return &graphql.Response{Errors: []*errors.QueryError{{Message: "mutations are not supported"}}} + return graphql.ErrorResponse(ctx, "mutations are not supported") } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -70,6 +69,7 @@ var addressImplementors = []string{"Address"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Address(ctx context.Context, sel []query.Selection, obj *Address) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, addressImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -92,16 +92,34 @@ func (ec *executionContext) _Address(ctx context.Context, sel []query.Selection, } func (ec *executionContext) _Address_id(ctx context.Context, field graphql.CollectedField, obj *Address) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Address" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } func (ec *executionContext) _Address_street(ctx context.Context, field graphql.CollectedField, obj *Address) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Address" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Street return graphql.MarshalString(res) } func (ec *executionContext) _Address_country(ctx context.Context, field graphql.CollectedField, obj *Address) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Address" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Country return graphql.MarshalString(res) } @@ -111,6 +129,7 @@ var customerImplementors = []string{"Customer"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Customer(ctx context.Context, sel []query.Selection, obj *Customer) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, customerImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -135,34 +154,47 @@ func (ec *executionContext) _Customer(ctx context.Context, sel []query.Selection } func (ec *executionContext) _Customer_id(ctx context.Context, field graphql.CollectedField, obj *Customer) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Customer" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } func (ec *executionContext) _Customer_name(ctx context.Context, field graphql.CollectedField, obj *Customer) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Customer" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } func (ec *executionContext) _Customer_address(ctx context.Context, field graphql.CollectedField, obj *Customer) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Customer", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Customer", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Customer_address(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Customer_address(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -177,24 +209,25 @@ func (ec *executionContext) _Customer_address(ctx context.Context, field graphql } func (ec *executionContext) _Customer_orders(ctx context.Context, field graphql.CollectedField, obj *Customer) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Customer", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Customer", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Customer_orders(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Customer_orders(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -203,7 +236,12 @@ func (ec *executionContext) _Customer_orders(ctx context.Context, field graphql. res := resTmp.([]Order) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Order(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Order(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -214,6 +252,7 @@ var itemImplementors = []string{"Item"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Item(ctx context.Context, sel []query.Selection, obj *Item) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, itemImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -232,6 +271,12 @@ func (ec *executionContext) _Item(ctx context.Context, sel []query.Selection, ob } func (ec *executionContext) _Item_name(ctx context.Context, field graphql.CollectedField, obj *Item) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Item" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } @@ -241,6 +286,7 @@ var orderImplementors = []string{"Order"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Order(ctx context.Context, sel []query.Selection, obj *Order) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, orderImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -265,39 +311,58 @@ func (ec *executionContext) _Order(ctx context.Context, sel []query.Selection, o } func (ec *executionContext) _Order_id(ctx context.Context, field graphql.CollectedField, obj *Order) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Order" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } func (ec *executionContext) _Order_date(ctx context.Context, field graphql.CollectedField, obj *Order) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Order" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Date return graphql.MarshalTime(res) } func (ec *executionContext) _Order_amount(ctx context.Context, field graphql.CollectedField, obj *Order) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Order" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Amount return graphql.MarshalFloat(res) } func (ec *executionContext) _Order_items(ctx context.Context, field graphql.CollectedField, obj *Order) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Order", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Order", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Order_items(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Order_items(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -306,7 +371,12 @@ func (ec *executionContext) _Order_items(ctx context.Context, field graphql.Coll res := resTmp.([]Item) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Item(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Item(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -317,6 +387,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -341,24 +416,25 @@ func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) g } func (ec *executionContext) _Query_customers(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_customers(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_customers(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -367,7 +443,12 @@ func (ec *executionContext) _Query_customers(ctx context.Context, field graphql. res := resTmp.([]Customer) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Customer(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Customer(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -388,29 +469,30 @@ func (ec *executionContext) _Query_torture(ctx context.Context, field graphql.Co } } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["customerIds"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_torture(rctx, args["customerIds"].([][]int)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_torture(ctx, args["customerIds"].([][]int)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -420,9 +502,17 @@ func (ec *executionContext) _Query_torture(ctx context.Context, field graphql.Co arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() arr2 := graphql.Array{} for idx2 := range res[idx1] { - arr2 = append(arr2, func() graphql.Marshaler { return ec._Customer(ctx, field.Selections, &res[idx1][idx2]) }()) + arr2 = append(arr2, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx2) + defer rctx.Pop() + return ec._Customer(ctx, field.Selections, &res[idx1][idx2]) + }()) } return arr2 }()) @@ -432,6 +522,12 @@ func (ec *executionContext) _Query_torture(ctx context.Context, field graphql.Co } func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -446,11 +542,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -463,6 +565,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -487,11 +590,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -500,19 +615,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -527,6 +662,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -551,11 +687,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -564,11 +712,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -581,6 +741,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -609,11 +770,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -622,10 +795,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -636,6 +818,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -644,11 +832,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -661,6 +861,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -685,11 +886,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -698,6 +911,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -706,6 +925,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -718,6 +943,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -744,10 +970,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -758,6 +993,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -766,6 +1007,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -774,6 +1021,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -782,10 +1035,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -800,6 +1062,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -834,11 +1097,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -847,6 +1122,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -861,15 +1142,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -880,10 +1170,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -894,10 +1193,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -914,15 +1222,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -933,10 +1250,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -947,6 +1273,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/example/scalars/generated.go b/example/scalars/generated.go index ec97af57f4..c40a132422 100644 --- a/example/scalars/generated.go +++ b/example/scalars/generated.go @@ -10,7 +10,6 @@ import ( time "time" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -53,11 +52,11 @@ func (e *executableSchema) Query(ctx context.Context, op *query.Operation) *grap } func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response { - return &graphql.Response{Errors: []*errors.QueryError{{Message: "mutations are not supported"}}} + return graphql.ErrorResponse(ctx, "mutations are not supported") } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -71,6 +70,7 @@ var addressImplementors = []string{"Address"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Address(ctx context.Context, sel []query.Selection, obj *Address) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, addressImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -91,11 +91,23 @@ func (ec *executionContext) _Address(ctx context.Context, sel []query.Selection, } func (ec *executionContext) _Address_id(ctx context.Context, field graphql.CollectedField, obj *Address) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Address" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return MarshalID(res) } func (ec *executionContext) _Address_location(ctx context.Context, field graphql.CollectedField, obj *Address) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Address" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Location if res == nil { return graphql.Null @@ -108,6 +120,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -138,29 +155,30 @@ func (ec *executionContext) _Query_user(ctx context.Context, field graphql.Colle var err error arg0, err = UnmarshalID(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_user(rctx, args["id"].(external.ObjectID)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_user(ctx, args["id"].(external.ObjectID)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -181,7 +199,7 @@ func (ec *executionContext) _Query_search(ctx context.Context, field graphql.Col var err error arg0, err = UnmarshalSearchArgs(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } else { @@ -189,30 +207,31 @@ func (ec *executionContext) _Query_search(ctx context.Context, field graphql.Col var err error arg0, err = UnmarshalSearchArgs(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["input"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_search(rctx, args["input"].(SearchArgs)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_search(ctx, args["input"].(SearchArgs)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -221,13 +240,24 @@ func (ec *executionContext) _Query_search(ctx context.Context, field graphql.Col res := resTmp.([]User) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._User(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._User(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) } func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -242,11 +272,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -259,6 +295,7 @@ var userImplementors = []string{"User"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _User(ctx context.Context, sel []query.Selection, obj *User) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, userImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -291,44 +328,69 @@ func (ec *executionContext) _User(ctx context.Context, sel []query.Selection, ob } func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return MarshalID(res) } func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } func (ec *executionContext) _User_created(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Created return MarshalTimestamp(res) } func (ec *executionContext) _User_isBanned(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsBanned return graphql.MarshalBoolean(bool(res)) } func (ec *executionContext) _User_primitiveResolver(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "User", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "User", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.User_primitiveResolver(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.User_primitiveResolver(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -340,24 +402,25 @@ func (ec *executionContext) _User_primitiveResolver(ctx context.Context, field g } func (ec *executionContext) _User_customResolver(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "User", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "User", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.User_customResolver(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.User_customResolver(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -369,11 +432,23 @@ func (ec *executionContext) _User_customResolver(ctx context.Context, field grap } func (ec *executionContext) _User_address(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Address return ec._Address(ctx, field.Selections, &res) } func (ec *executionContext) _User_tier(ctx context.Context, field graphql.CollectedField, obj *User) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "User" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Tier return res } @@ -383,6 +458,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -407,11 +483,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -420,19 +508,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -447,6 +555,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -471,11 +580,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -484,11 +605,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -501,6 +634,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -529,11 +663,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -542,10 +688,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -556,6 +711,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -564,11 +725,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -581,6 +754,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -605,11 +779,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -618,6 +804,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -626,6 +818,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -638,6 +836,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -664,10 +863,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -678,6 +886,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -686,6 +900,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -694,6 +914,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -702,10 +928,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -720,6 +955,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -754,11 +990,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -767,6 +1015,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -781,15 +1035,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -800,10 +1063,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -814,10 +1086,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -834,15 +1115,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -853,10 +1143,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -867,6 +1166,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/example/selection/generated.go b/example/selection/generated.go index 469a5c04d8..c1f7ccc0cb 100644 --- a/example/selection/generated.go +++ b/example/selection/generated.go @@ -9,7 +9,6 @@ import ( strconv "strconv" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -48,11 +47,11 @@ func (e *executableSchema) Query(ctx context.Context, op *query.Operation) *grap } func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response { - return &graphql.Response{Errors: []*errors.QueryError{{Message: "mutations are not supported"}}} + return graphql.ErrorResponse(ctx, "mutations are not supported") } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -66,6 +65,7 @@ var likeImplementors = []string{"Like", "Event"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Like(ctx context.Context, sel []query.Selection, obj *Like) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, likeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -90,29 +90,63 @@ func (ec *executionContext) _Like(ctx context.Context, sel []query.Selection, ob } func (ec *executionContext) _Like_reaction(ctx context.Context, field graphql.CollectedField, obj *Like) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Like" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Reaction return graphql.MarshalString(res) } func (ec *executionContext) _Like_sent(ctx context.Context, field graphql.CollectedField, obj *Like) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Like" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Sent return graphql.MarshalTime(res) } func (ec *executionContext) _Like_selection(ctx context.Context, field graphql.CollectedField, obj *Like) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Like" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Selection arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) _Like_collected(ctx context.Context, field graphql.CollectedField, obj *Like) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Like" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Collected arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } @@ -122,6 +156,7 @@ var postImplementors = []string{"Post", "Event"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Post(ctx context.Context, sel []query.Selection, obj *Post) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, postImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -146,29 +181,63 @@ func (ec *executionContext) _Post(ctx context.Context, sel []query.Selection, ob } func (ec *executionContext) _Post_message(ctx context.Context, field graphql.CollectedField, obj *Post) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Post" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Message return graphql.MarshalString(res) } func (ec *executionContext) _Post_sent(ctx context.Context, field graphql.CollectedField, obj *Post) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Post" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Sent return graphql.MarshalTime(res) } func (ec *executionContext) _Post_selection(ctx context.Context, field graphql.CollectedField, obj *Post) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Post" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Selection arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) _Post_collected(ctx context.Context, field graphql.CollectedField, obj *Post) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Post" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Collected arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } @@ -178,6 +247,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -200,24 +274,25 @@ func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) g } func (ec *executionContext) _Query_events(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_events(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_events(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -226,13 +301,24 @@ func (ec *executionContext) _Query_events(ctx context.Context, field graphql.Col res := resTmp.([]Event) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Event(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Event(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) } func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -247,11 +333,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -264,6 +356,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -288,11 +381,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -301,19 +406,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -328,6 +453,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -352,11 +478,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -365,11 +503,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -382,6 +532,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -410,11 +561,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -423,10 +586,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -437,6 +609,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -445,11 +623,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -462,6 +652,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -486,11 +677,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -499,6 +702,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -507,6 +716,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -519,6 +734,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -545,10 +761,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -559,6 +784,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -567,6 +798,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -575,6 +812,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -583,10 +826,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -601,6 +853,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -635,11 +888,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -648,6 +913,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -662,15 +933,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -681,10 +961,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -695,10 +984,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -715,15 +1013,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -734,10 +1041,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -748,6 +1064,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/example/starwars/generated.go b/example/starwars/generated.go index 2e6f48449c..000b94b48e 100644 --- a/example/starwars/generated.go +++ b/example/starwars/generated.go @@ -10,7 +10,6 @@ import ( time "time" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -83,7 +82,7 @@ func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *g } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -97,6 +96,7 @@ var droidImplementors = []string{"Droid", "Character"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Droid(ctx context.Context, sel []query.Selection, obj *Droid) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, droidImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -125,34 +125,47 @@ func (ec *executionContext) _Droid(ctx context.Context, sel []query.Selection, o } func (ec *executionContext) _Droid_id(ctx context.Context, field graphql.CollectedField, obj *Droid) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Droid" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalID(res) } func (ec *executionContext) _Droid_name(ctx context.Context, field graphql.CollectedField, obj *Droid) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Droid" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } func (ec *executionContext) _Droid_friends(ctx context.Context, field graphql.CollectedField, obj *Droid) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Droid", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Droid", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Droid_friends(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Droid_friends(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -161,7 +174,12 @@ func (ec *executionContext) _Droid_friends(ctx context.Context, field graphql.Co res := resTmp.([]Character) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Character(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Character(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -179,7 +197,7 @@ func (ec *executionContext) _Droid_friendsConnection(ctx context.Context, field } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -194,29 +212,30 @@ func (ec *executionContext) _Droid_friendsConnection(ctx context.Context, field } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["after"] = arg1 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Droid", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Droid", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Droid_friendsConnection(rctx, obj, args["first"].(*int), args["after"].(*string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Droid_friendsConnection(ctx, obj, args["first"].(*int), args["after"].(*string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -228,15 +247,32 @@ func (ec *executionContext) _Droid_friendsConnection(ctx context.Context, field } func (ec *executionContext) _Droid_appearsIn(ctx context.Context, field graphql.CollectedField, obj *Droid) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Droid" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.AppearsIn arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return res[idx1] }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return res[idx1] + }()) } return arr1 } func (ec *executionContext) _Droid_primaryFunction(ctx context.Context, field graphql.CollectedField, obj *Droid) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Droid" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PrimaryFunction return graphql.MarshalString(res) } @@ -246,6 +282,7 @@ var friendsConnectionImplementors = []string{"FriendsConnection"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _FriendsConnection(ctx context.Context, sel []query.Selection, obj *FriendsConnection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, friendsConnectionImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -270,29 +307,36 @@ func (ec *executionContext) _FriendsConnection(ctx context.Context, sel []query. } func (ec *executionContext) _FriendsConnection_totalCount(ctx context.Context, field graphql.CollectedField, obj *FriendsConnection) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "FriendsConnection" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.TotalCount() return graphql.MarshalInt(res) } func (ec *executionContext) _FriendsConnection_edges(ctx context.Context, field graphql.CollectedField, obj *FriendsConnection) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "FriendsConnection", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "FriendsConnection", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.FriendsConnection_edges(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.FriendsConnection_edges(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -301,31 +345,37 @@ func (ec *executionContext) _FriendsConnection_edges(ctx context.Context, field res := resTmp.([]FriendsEdge) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._FriendsEdge(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._FriendsEdge(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) } func (ec *executionContext) _FriendsConnection_friends(ctx context.Context, field graphql.CollectedField, obj *FriendsConnection) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "FriendsConnection", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "FriendsConnection", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.FriendsConnection_friends(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.FriendsConnection_friends(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -334,13 +384,24 @@ func (ec *executionContext) _FriendsConnection_friends(ctx context.Context, fiel res := resTmp.([]Character) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Character(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Character(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) } func (ec *executionContext) _FriendsConnection_pageInfo(ctx context.Context, field graphql.CollectedField, obj *FriendsConnection) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "FriendsConnection" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PageInfo() return ec._PageInfo(ctx, field.Selections, &res) } @@ -350,6 +411,7 @@ var friendsEdgeImplementors = []string{"FriendsEdge"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _FriendsEdge(ctx context.Context, sel []query.Selection, obj *FriendsEdge) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, friendsEdgeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -370,11 +432,23 @@ func (ec *executionContext) _FriendsEdge(ctx context.Context, sel []query.Select } func (ec *executionContext) _FriendsEdge_cursor(ctx context.Context, field graphql.CollectedField, obj *FriendsEdge) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "FriendsEdge" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Cursor return graphql.MarshalID(res) } func (ec *executionContext) _FriendsEdge_node(ctx context.Context, field graphql.CollectedField, obj *FriendsEdge) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "FriendsEdge" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Node return ec._Character(ctx, field.Selections, &res) } @@ -384,6 +458,7 @@ var humanImplementors = []string{"Human", "Character"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Human(ctx context.Context, sel []query.Selection, obj *Human) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, humanImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -416,11 +491,23 @@ func (ec *executionContext) _Human(ctx context.Context, sel []query.Selection, o } func (ec *executionContext) _Human_id(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Human" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalID(res) } func (ec *executionContext) _Human_name(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Human" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } @@ -432,7 +519,7 @@ func (ec *executionContext) _Human_height(ctx context.Context, field graphql.Col var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } else { @@ -440,40 +527,53 @@ func (ec *executionContext) _Human_height(ctx context.Context, field graphql.Col var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["unit"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Human" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Height(args["unit"].(LengthUnit)) return graphql.MarshalFloat(res) } func (ec *executionContext) _Human_mass(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Human" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Mass return graphql.MarshalFloat(res) } func (ec *executionContext) _Human_friends(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Human", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Human", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Human_friends(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Human_friends(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -482,7 +582,12 @@ func (ec *executionContext) _Human_friends(ctx context.Context, field graphql.Co res := resTmp.([]Character) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Character(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Character(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -500,7 +605,7 @@ func (ec *executionContext) _Human_friendsConnection(ctx context.Context, field } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -515,29 +620,30 @@ func (ec *executionContext) _Human_friendsConnection(ctx context.Context, field } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["after"] = arg1 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Human", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Human", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Human_friendsConnection(rctx, obj, args["first"].(*int), args["after"].(*string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Human_friendsConnection(ctx, obj, args["first"].(*int), args["after"].(*string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -549,33 +655,45 @@ func (ec *executionContext) _Human_friendsConnection(ctx context.Context, field } func (ec *executionContext) _Human_appearsIn(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Human" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.AppearsIn arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return res[idx1] }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return res[idx1] + }()) } return arr1 } func (ec *executionContext) _Human_starships(ctx context.Context, field graphql.CollectedField, obj *Human) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Human", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Human", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Human_starships(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Human_starships(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -584,7 +702,12 @@ func (ec *executionContext) _Human_starships(ctx context.Context, field graphql. res := resTmp.([]Starship) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Starship(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Starship(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -595,6 +718,11 @@ var mutationImplementors = []string{"Mutation"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Mutation(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, mutationImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Mutation", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -619,7 +747,7 @@ func (ec *executionContext) _Mutation_createReview(ctx context.Context, field gr var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -629,21 +757,23 @@ func (ec *executionContext) _Mutation_createReview(ctx context.Context, field gr var err error arg1, err = UnmarshalReviewInput(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["review"] = arg1 - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Mutation", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Mutation_createReview(rctx, args["episode"].(Episode), args["review"].(Review)) + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Mutation" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Mutation_createReview(ctx, args["episode"].(Episode), args["review"].(Review)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -661,6 +791,7 @@ var pageInfoImplementors = []string{"PageInfo"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _PageInfo(ctx context.Context, sel []query.Selection, obj *PageInfo) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, pageInfoImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -683,16 +814,34 @@ func (ec *executionContext) _PageInfo(ctx context.Context, sel []query.Selection } func (ec *executionContext) _PageInfo_startCursor(ctx context.Context, field graphql.CollectedField, obj *PageInfo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "PageInfo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.StartCursor return graphql.MarshalID(res) } func (ec *executionContext) _PageInfo_endCursor(ctx context.Context, field graphql.CollectedField, obj *PageInfo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "PageInfo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EndCursor return graphql.MarshalID(res) } func (ec *executionContext) _PageInfo_hasNextPage(ctx context.Context, field graphql.CollectedField, obj *PageInfo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "PageInfo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.HasNextPage return graphql.MarshalBoolean(res) } @@ -702,6 +851,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -742,7 +896,7 @@ func (ec *executionContext) _Query_hero(ctx context.Context, field graphql.Colle var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } else { @@ -750,30 +904,31 @@ func (ec *executionContext) _Query_hero(ctx context.Context, field graphql.Colle var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["episode"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_hero(rctx, args["episode"].(Episode)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_hero(ctx, args["episode"].(Episode)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -791,7 +946,7 @@ func (ec *executionContext) _Query_reviews(ctx context.Context, field graphql.Co var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -806,29 +961,30 @@ func (ec *executionContext) _Query_reviews(ctx context.Context, field graphql.Co } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["since"] = arg1 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_reviews(rctx, args["episode"].(Episode), args["since"].(*time.Time)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_reviews(ctx, args["episode"].(Episode), args["since"].(*time.Time)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -837,7 +993,12 @@ func (ec *executionContext) _Query_reviews(ctx context.Context, field graphql.Co res := resTmp.([]Review) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Review(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Review(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -850,29 +1011,30 @@ func (ec *executionContext) _Query_search(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["text"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_search(rctx, args["text"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_search(ctx, args["text"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -881,7 +1043,12 @@ func (ec *executionContext) _Query_search(ctx context.Context, field graphql.Col res := resTmp.([]SearchResult) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._SearchResult(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._SearchResult(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -894,29 +1061,30 @@ func (ec *executionContext) _Query_character(ctx context.Context, field graphql. var err error arg0, err = graphql.UnmarshalID(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_character(rctx, args["id"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_character(ctx, args["id"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -934,29 +1102,30 @@ func (ec *executionContext) _Query_droid(ctx context.Context, field graphql.Coll var err error arg0, err = graphql.UnmarshalID(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_droid(rctx, args["id"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_droid(ctx, args["id"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -977,29 +1146,30 @@ func (ec *executionContext) _Query_human(ctx context.Context, field graphql.Coll var err error arg0, err = graphql.UnmarshalID(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_human(rctx, args["id"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_human(ctx, args["id"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -1020,29 +1190,30 @@ func (ec *executionContext) _Query_starship(ctx context.Context, field graphql.C var err error arg0, err = graphql.UnmarshalID(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_starship(rctx, args["id"].(string)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_starship(ctx, args["id"].(string)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -1057,6 +1228,12 @@ func (ec *executionContext) _Query_starship(ctx context.Context, field graphql.C } func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -1071,11 +1248,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -1088,6 +1271,7 @@ var reviewImplementors = []string{"Review"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Review(ctx context.Context, sel []query.Selection, obj *Review) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, reviewImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1110,11 +1294,23 @@ func (ec *executionContext) _Review(ctx context.Context, sel []query.Selection, } func (ec *executionContext) _Review_stars(ctx context.Context, field graphql.CollectedField, obj *Review) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Review" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Stars return graphql.MarshalInt(res) } func (ec *executionContext) _Review_commentary(ctx context.Context, field graphql.CollectedField, obj *Review) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Review" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Commentary if res == nil { return graphql.Null @@ -1123,6 +1319,12 @@ func (ec *executionContext) _Review_commentary(ctx context.Context, field graphq } func (ec *executionContext) _Review_time(ctx context.Context, field graphql.CollectedField, obj *Review) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Review" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Time return graphql.MarshalTime(res) } @@ -1132,6 +1334,7 @@ var starshipImplementors = []string{"Starship"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Starship(ctx context.Context, sel []query.Selection, obj *Starship) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, starshipImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1156,11 +1359,23 @@ func (ec *executionContext) _Starship(ctx context.Context, sel []query.Selection } func (ec *executionContext) _Starship_id(ctx context.Context, field graphql.CollectedField, obj *Starship) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Starship" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalID(res) } func (ec *executionContext) _Starship_name(ctx context.Context, field graphql.CollectedField, obj *Starship) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Starship" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name return graphql.MarshalString(res) } @@ -1172,7 +1387,7 @@ func (ec *executionContext) _Starship_length(ctx context.Context, field graphql. var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } else { @@ -1180,24 +1395,44 @@ func (ec *executionContext) _Starship_length(ctx context.Context, field graphql. var err error err = (&arg0).UnmarshalGQL(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["unit"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Starship" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Length(args["unit"].(LengthUnit)) return graphql.MarshalFloat(res) } func (ec *executionContext) _Starship_history(ctx context.Context, field graphql.CollectedField, obj *Starship) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Starship" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.History arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() arr2 := graphql.Array{} for idx2 := range res[idx1] { - arr2 = append(arr2, func() graphql.Marshaler { return graphql.MarshalInt(res[idx1][idx2]) }()) + arr2 = append(arr2, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx2) + defer rctx.Pop() + return graphql.MarshalInt(res[idx1][idx2]) + }()) } return arr2 }()) @@ -1210,6 +1445,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1234,11 +1470,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1247,19 +1495,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1274,6 +1542,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1298,11 +1567,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1311,11 +1592,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -1328,6 +1621,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1356,11 +1650,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1369,10 +1675,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1383,6 +1698,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -1391,11 +1712,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -1408,6 +1741,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1432,11 +1766,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1445,6 +1791,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -1453,6 +1805,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -1465,6 +1823,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1491,10 +1850,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1505,6 +1873,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -1513,6 +1887,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -1521,6 +1901,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -1529,10 +1915,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1547,6 +1942,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1581,11 +1977,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -1594,6 +2002,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1608,15 +2022,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1627,10 +2050,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1641,10 +2073,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1661,15 +2102,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1680,10 +2130,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1694,6 +2153,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/example/todo/generated.go b/example/todo/generated.go index 8b4769bfdd..4506eabca9 100644 --- a/example/todo/generated.go +++ b/example/todo/generated.go @@ -8,7 +8,6 @@ import ( strconv "strconv" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -67,7 +66,7 @@ func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *g } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -81,6 +80,11 @@ var myMutationImplementors = []string{"MyMutation"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _MyMutation(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, myMutationImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "MyMutation", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -107,21 +111,23 @@ func (ec *executionContext) _MyMutation_createTodo(ctx context.Context, field gr var err error arg0, err = UnmarshalTodoInput(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["todo"] = arg0 - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "MyMutation", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.MyMutation_createTodo(rctx, args["todo"].(TodoInput)) + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "MyMutation" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.MyMutation_createTodo(ctx, args["todo"].(TodoInput)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -138,7 +144,7 @@ func (ec *executionContext) _MyMutation_updateTodo(ctx context.Context, field gr var err error arg0, err = graphql.UnmarshalInt(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } @@ -148,21 +154,23 @@ func (ec *executionContext) _MyMutation_updateTodo(ctx context.Context, field gr var err error arg1 = tmp.(map[string]interface{}) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["changes"] = arg1 - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "MyMutation", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.MyMutation_updateTodo(rctx, args["id"].(int), args["changes"].(map[string]interface{})) + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "MyMutation" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.MyMutation_updateTodo(ctx, args["id"].(int), args["changes"].(map[string]interface{})) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -180,6 +188,11 @@ var myQueryImplementors = []string{"MyQuery"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _MyQuery(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, myQueryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "MyQuery", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -212,29 +225,30 @@ func (ec *executionContext) _MyQuery_todo(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalInt(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["id"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "MyQuery", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "MyQuery", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.MyQuery_todo(rctx, args["id"].(int)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.MyQuery_todo(ctx, args["id"].(int)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -249,24 +263,25 @@ func (ec *executionContext) _MyQuery_todo(ctx context.Context, field graphql.Col } func (ec *executionContext) _MyQuery_lastTodo(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "MyQuery", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "MyQuery", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.MyQuery_lastTodo(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.MyQuery_lastTodo(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -281,24 +296,25 @@ func (ec *executionContext) _MyQuery_lastTodo(ctx context.Context, field graphql } func (ec *executionContext) _MyQuery_todos(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "MyQuery", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "MyQuery", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.MyQuery_todos(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.MyQuery_todos(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -307,13 +323,24 @@ func (ec *executionContext) _MyQuery_todos(ctx context.Context, field graphql.Co res := resTmp.([]Todo) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Todo(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Todo(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) } func (ec *executionContext) _MyQuery___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "MyQuery" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -328,11 +355,17 @@ func (ec *executionContext) _MyQuery___type(ctx context.Context, field graphql.C var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "MyQuery" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -345,6 +378,7 @@ var todoImplementors = []string{"Todo"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Todo(ctx context.Context, sel []query.Selection, obj *Todo) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, todoImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -367,16 +401,34 @@ func (ec *executionContext) _Todo(ctx context.Context, sel []query.Selection, ob } func (ec *executionContext) _Todo_id(ctx context.Context, field graphql.CollectedField, obj *Todo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Todo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } func (ec *executionContext) _Todo_text(ctx context.Context, field graphql.CollectedField, obj *Todo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Todo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Text return graphql.MarshalString(res) } func (ec *executionContext) _Todo_done(ctx context.Context, field graphql.CollectedField, obj *Todo) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Todo" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Done return graphql.MarshalBoolean(res) } @@ -386,6 +438,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -410,11 +463,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -423,19 +488,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -450,6 +535,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -474,11 +560,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -487,11 +585,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -504,6 +614,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -532,11 +643,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -545,10 +668,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -559,6 +691,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -567,11 +705,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -584,6 +734,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -608,11 +759,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -621,6 +784,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -629,6 +798,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -641,6 +816,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -667,10 +843,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -681,6 +866,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -689,6 +880,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -697,6 +894,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -705,10 +908,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -723,6 +935,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -757,11 +970,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -770,6 +995,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -784,15 +1015,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -803,10 +1043,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -817,10 +1066,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -837,15 +1095,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -856,10 +1123,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -870,6 +1146,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null diff --git a/test/generated.go b/test/generated.go index c1d86e0789..b2fe8e26a2 100644 --- a/test/generated.go +++ b/test/generated.go @@ -9,7 +9,6 @@ import ( strconv "strconv" graphql "github.com/vektah/gqlgen/graphql" - errors "github.com/vektah/gqlgen/neelance/errors" introspection "github.com/vektah/gqlgen/neelance/introspection" query "github.com/vektah/gqlgen/neelance/query" schema "github.com/vektah/gqlgen/neelance/schema" @@ -23,6 +22,9 @@ func MakeExecutableSchema(resolvers Resolvers) graphql.ExecutableSchema { } type Resolvers interface { + Element_child(ctx context.Context, obj *Element) (Element, error) + Element_error(ctx context.Context, obj *Element, message *string) (bool, error) + OuterObject_inner(ctx context.Context, obj *models.OuterObject) (models.InnerObject, error) Query_nestedInputs(ctx context.Context, input [][]models.OuterInput) (*bool, error) Query_nestedOutputs(ctx context.Context) ([][]models.OuterObject, error) @@ -31,6 +33,7 @@ type Resolvers interface { Query_mapInput(ctx context.Context, input *map[string]interface{}) (*bool, error) Query_collision(ctx context.Context) (*introspection1.It, error) Query_invalidIdentifier(ctx context.Context) (*invalid_identifier.InvalidIdentifier, error) + Query_path(ctx context.Context) ([]Element, error) } type executableSchema struct { @@ -58,11 +61,11 @@ func (e *executableSchema) Query(ctx context.Context, op *query.Operation) *grap } func (e *executableSchema) Mutation(ctx context.Context, op *query.Operation) *graphql.Response { - return &graphql.Response{Errors: []*errors.QueryError{{Message: "mutations are not supported"}}} + return graphql.ErrorResponse(ctx, "mutations are not supported") } func (e *executableSchema) Subscription(ctx context.Context, op *query.Operation) func() *graphql.Response { - return graphql.OneShot(&graphql.Response{Errors: []*errors.QueryError{{Message: "subscriptions are not supported"}}}) + return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported")) } type executionContext struct { @@ -76,6 +79,7 @@ var circleImplementors = []string{"Circle", "Shape"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Circle(ctx context.Context, sel []query.Selection, obj *Circle) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, circleImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -96,20 +100,134 @@ func (ec *executionContext) _Circle(ctx context.Context, sel []query.Selection, } func (ec *executionContext) _Circle_radius(ctx context.Context, field graphql.CollectedField, obj *Circle) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Circle" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Radius return graphql.MarshalFloat(res) } func (ec *executionContext) _Circle_area(ctx context.Context, field graphql.CollectedField, obj *Circle) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Circle" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Area() return graphql.MarshalFloat(res) } +var elementImplementors = []string{"Element"} + +// nolint: gocyclo, errcheck, gas, goconst +func (ec *executionContext) _Element(ctx context.Context, sel []query.Selection, obj *Element) graphql.Marshaler { + fields := graphql.CollectFields(ec.Doc, sel, elementImplementors, ec.Variables) + + out := graphql.NewOrderedMap(len(fields)) + for i, field := range fields { + out.Keys[i] = field.Alias + + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("Element") + case "child": + out.Values[i] = ec._Element_child(ctx, field, obj) + case "error": + out.Values[i] = ec._Element_error(ctx, field, obj) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + + return out +} + +func (ec *executionContext) _Element_child(ctx context.Context, field graphql.CollectedField, obj *Element) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Element", + Args: nil, + Field: field, + }) + return graphql.Defer(func() (ret graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + userErr := ec.Recover(ctx, r) + ec.Error(ctx, userErr) + ret = graphql.Null + } + }() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Element_child(ctx, obj) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(Element) + return ec._Element(ctx, field.Selections, &res) + }) +} + +func (ec *executionContext) _Element_error(ctx context.Context, field graphql.CollectedField, obj *Element) graphql.Marshaler { + args := map[string]interface{}{} + var arg0 *string + if tmp, ok := field.Args["message"]; ok { + var err error + var ptr1 string + if tmp != nil { + ptr1, err = graphql.UnmarshalString(tmp) + arg0 = &ptr1 + } + + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + } + args["message"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Element", + Args: args, + Field: field, + }) + return graphql.Defer(func() (ret graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + userErr := ec.Recover(ctx, r) + ec.Error(ctx, userErr) + ret = graphql.Null + } + }() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Element_error(ctx, obj, args["message"].(*string)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(bool) + return graphql.MarshalBoolean(res) + }) +} + var innerObjectImplementors = []string{"InnerObject"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _InnerObject(ctx context.Context, sel []query.Selection, obj *models.InnerObject) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, innerObjectImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -128,6 +246,12 @@ func (ec *executionContext) _InnerObject(ctx context.Context, sel []query.Select } func (ec *executionContext) _InnerObject_id(ctx context.Context, field graphql.CollectedField, obj *models.InnerObject) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "InnerObject" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } @@ -137,6 +261,7 @@ var invalidIdentifierImplementors = []string{"InvalidIdentifier"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _InvalidIdentifier(ctx context.Context, sel []query.Selection, obj *invalid_identifier.InvalidIdentifier) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, invalidIdentifierImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -155,6 +280,12 @@ func (ec *executionContext) _InvalidIdentifier(ctx context.Context, sel []query. } func (ec *executionContext) _InvalidIdentifier_id(ctx context.Context, field graphql.CollectedField, obj *invalid_identifier.InvalidIdentifier) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "InvalidIdentifier" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalInt(res) } @@ -164,6 +295,7 @@ var itImplementors = []string{"It"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _It(ctx context.Context, sel []query.Selection, obj *introspection1.It) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, itImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -182,6 +314,12 @@ func (ec *executionContext) _It(ctx context.Context, sel []query.Selection, obj } func (ec *executionContext) _It_id(ctx context.Context, field graphql.CollectedField, obj *introspection1.It) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "It" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.ID return graphql.MarshalID(res) } @@ -191,6 +329,7 @@ var outerObjectImplementors = []string{"OuterObject"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _OuterObject(ctx context.Context, sel []query.Selection, obj *models.OuterObject) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, outerObjectImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -209,24 +348,25 @@ func (ec *executionContext) _OuterObject(ctx context.Context, sel []query.Select } func (ec *executionContext) _OuterObject_inner(ctx context.Context, field graphql.CollectedField, obj *models.OuterObject) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "OuterObject", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "OuterObject", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.OuterObject_inner(rctx, obj) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.OuterObject_inner(ctx, obj) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -242,6 +382,11 @@ var queryImplementors = []string{"Query"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, queryImplementors, ec.Variables) + + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + }) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -263,6 +408,8 @@ func (ec *executionContext) _Query(ctx context.Context, sel []query.Selection) g out.Values[i] = ec._Query_collision(ctx, field) case "invalidIdentifier": out.Values[i] = ec._Query_invalidIdentifier(ctx, field) + case "path": + out.Values[i] = ec._Query_path(ctx, field) case "__schema": out.Values[i] = ec._Query___schema(ctx, field) case "__type": @@ -290,7 +437,7 @@ func (ec *executionContext) _Query_nestedInputs(ctx context.Context, field graph } } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } else { @@ -306,30 +453,31 @@ func (ec *executionContext) _Query_nestedInputs(ctx context.Context, field graph } } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["input"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_nestedInputs(rctx, args["input"].([][]models.OuterInput)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_nestedInputs(ctx, args["input"].([][]models.OuterInput)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -344,24 +492,25 @@ func (ec *executionContext) _Query_nestedInputs(ctx context.Context, field graph } func (ec *executionContext) _Query_nestedOutputs(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_nestedOutputs(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_nestedOutputs(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -371,9 +520,17 @@ func (ec *executionContext) _Query_nestedOutputs(ctx context.Context, field grap arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() arr2 := graphql.Array{} for idx2 := range res[idx1] { - arr2 = append(arr2, func() graphql.Marshaler { return ec._OuterObject(ctx, field.Selections, &res[idx1][idx2]) }()) + arr2 = append(arr2, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx2) + defer rctx.Pop() + return ec._OuterObject(ctx, field.Selections, &res[idx1][idx2]) + }()) } return arr2 }()) @@ -383,24 +540,25 @@ func (ec *executionContext) _Query_nestedOutputs(ctx context.Context, field grap } func (ec *executionContext) _Query_shapes(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_shapes(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_shapes(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -409,7 +567,12 @@ func (ec *executionContext) _Query_shapes(ctx context.Context, field graphql.Col res := resTmp.([]Shape) arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return ec._Shape(ctx, field.Selections, &res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Shape(ctx, field.Selections, &res[idx1]) + }()) } return arr1 }) @@ -427,29 +590,30 @@ func (ec *executionContext) _Query_recursive(ctx context.Context, field graphql. } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["input"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_recursive(rctx, args["input"].(*RecursiveInputSlice)) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_recursive(ctx, args["input"].(*RecursiveInputSlice)) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -475,29 +639,30 @@ func (ec *executionContext) _Query_mapInput(ctx context.Context, field graphql.C } if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["input"] = arg0 + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: args, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: args, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_mapInput(rctx, args["input"].(*map[string]interface{})) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_mapInput(ctx, args["input"].(*map[string]interface{})) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -512,24 +677,25 @@ func (ec *executionContext) _Query_mapInput(ctx context.Context, field graphql.C } func (ec *executionContext) _Query_collision(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_collision(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_collision(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -544,24 +710,25 @@ func (ec *executionContext) _Query_collision(ctx context.Context, field graphql. } func (ec *executionContext) _Query_invalidIdentifier(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) return graphql.Defer(func() (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { userErr := ec.Recover(ctx, r) - ec.Error(userErr) + ec.Error(ctx, userErr) ret = graphql.Null } }() - rctx := graphql.WithResolverContext(ctx, &graphql.ResolverContext{ - Object: "Query", - Args: nil, - Field: field, - }) - resTmp, err := ec.ResolverMiddleware(rctx, func(rctx context.Context) (interface{}, error) { - return ec.resolvers.Query_invalidIdentifier(rctx) + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_invalidIdentifier(ctx) }) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } if resTmp == nil { @@ -575,7 +742,52 @@ func (ec *executionContext) _Query_invalidIdentifier(ctx context.Context, field }) } +func (ec *executionContext) _Query_path(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{ + Object: "Query", + Args: nil, + Field: field, + }) + return graphql.Defer(func() (ret graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + userErr := ec.Recover(ctx, r) + ec.Error(ctx, userErr) + ret = graphql.Null + } + }() + + resTmp, err := ec.ResolverMiddleware(ctx, func(ctx context.Context) (interface{}, error) { + return ec.resolvers.Query_path(ctx) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]Element) + arr1 := graphql.Array{} + for idx1 := range res { + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return ec._Element(ctx, field.Selections, &res[idx1]) + }()) + } + return arr1 + }) +} + func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectSchema() if res == nil { return graphql.Null @@ -590,11 +802,17 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col var err error arg0, err = graphql.UnmarshalString(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["name"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Query" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := ec.introspectType(args["name"].(string)) if res == nil { return graphql.Null @@ -607,6 +825,7 @@ var rectangleImplementors = []string{"Rectangle", "Shape"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) _Rectangle(ctx context.Context, sel []query.Selection, obj *Rectangle) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, rectangleImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -629,16 +848,34 @@ func (ec *executionContext) _Rectangle(ctx context.Context, sel []query.Selectio } func (ec *executionContext) _Rectangle_length(ctx context.Context, field graphql.CollectedField, obj *Rectangle) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Rectangle" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Length return graphql.MarshalFloat(res) } func (ec *executionContext) _Rectangle_width(ctx context.Context, field graphql.CollectedField, obj *Rectangle) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Rectangle" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Width return graphql.MarshalFloat(res) } func (ec *executionContext) _Rectangle_area(ctx context.Context, field graphql.CollectedField, obj *Rectangle) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "Rectangle" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Area() return graphql.MarshalFloat(res) } @@ -648,6 +885,7 @@ var __DirectiveImplementors = []string{"__Directive"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Selection, obj *introspection.Directive) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __DirectiveImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -672,11 +910,23 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel []query.Select } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -685,19 +935,39 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Locations() arr1 := graphql.Array{} for idx1 := range res { - arr1 = append(arr1, func() graphql.Marshaler { return graphql.MarshalString(res[idx1]) }()) + arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() + return graphql.MarshalString(res[idx1]) + }()) } return arr1 } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Directive" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -712,6 +982,7 @@ var __EnumValueImplementors = []string{"__EnumValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Selection, obj *introspection.EnumValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __EnumValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -736,11 +1007,23 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel []query.Select } func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -749,11 +1032,23 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__EnumValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -766,6 +1061,7 @@ var __FieldImplementors = []string{"__Field"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, obj *introspection.Field) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __FieldImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -794,11 +1090,23 @@ func (ec *executionContext) ___Field(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -807,10 +1115,19 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Args() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -821,6 +1138,12 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -829,11 +1152,23 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col } func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.IsDeprecated() return graphql.MarshalBoolean(res) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Field" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DeprecationReason() if res == nil { return graphql.Null @@ -846,6 +1181,7 @@ var __InputValueImplementors = []string{"__InputValue"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selection, obj *introspection.InputValue) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __InputValueImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -870,11 +1206,23 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel []query.Selec } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() return graphql.MarshalString(res) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -883,6 +1231,12 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Type() if res == nil { return graphql.Null @@ -891,6 +1245,12 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq } func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__InputValue" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.DefaultValue() if res == nil { return graphql.Null @@ -903,6 +1263,7 @@ var __SchemaImplementors = []string{"__Schema"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection, obj *introspection.Schema) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __SchemaImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -929,10 +1290,19 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel []query.Selection } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Types() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -943,6 +1313,12 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C } func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.QueryType() if res == nil { return graphql.Null @@ -951,6 +1327,12 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph } func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.MutationType() if res == nil { return graphql.Null @@ -959,6 +1341,12 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr } func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.SubscriptionType() if res == nil { return graphql.Null @@ -967,10 +1355,19 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel } func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Schema" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Directives() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -985,6 +1382,7 @@ var __TypeImplementors = []string{"__Type"} // nolint: gocyclo, errcheck, gas, goconst func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, obj *introspection.Type) graphql.Marshaler { fields := graphql.CollectFields(ec.Doc, sel, __TypeImplementors, ec.Variables) + out := graphql.NewOrderedMap(len(fields)) for i, field := range fields { out.Keys[i] = field.Alias @@ -1019,11 +1417,23 @@ func (ec *executionContext) ___Type(ctx context.Context, sel []query.Selection, } func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Kind() return graphql.MarshalString(res) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Name() if res == nil { return graphql.Null @@ -1032,6 +1442,12 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Description() if res == nil { return graphql.Null @@ -1046,15 +1462,24 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Fields(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1065,10 +1490,19 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co } func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.Interfaces() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1079,10 +1513,19 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq } func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.PossibleTypes() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1099,15 +1542,24 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq var err error arg0, err = graphql.UnmarshalBoolean(tmp) if err != nil { - ec.Error(err) + ec.Error(ctx, err) return graphql.Null } } args["includeDeprecated"] = arg0 + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = args + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.EnumValues(args["includeDeprecated"].(bool)) arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1118,10 +1570,19 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq } func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.InputFields() arr1 := graphql.Array{} for idx1 := range res { arr1 = append(arr1, func() graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.PushIndex(idx1) + defer rctx.Pop() if res[idx1] == nil { return graphql.Null } @@ -1132,6 +1593,12 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph } func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) graphql.Marshaler { + rctx := graphql.GetResolverContext(ctx) + rctx.Object = "__Type" + rctx.Args = nil + rctx.Field = field + rctx.PushField(field.Alias) + defer rctx.Pop() res := obj.OfType() if res == nil { return graphql.Null @@ -1291,6 +1758,11 @@ type InvalidIdentifier { id: Int! } +type Element { + child: Element! + error(message: String): Boolean! +} + type Query { nestedInputs(input: [[OuterInput]] = [[{inner: {id: 1}}]]): Boolean nestedOutputs: [[OuterObject]] @@ -1299,5 +1771,6 @@ type Query { mapInput(input: Changes): Boolean collision: It invalidIdentifier: InvalidIdentifier + path: [Element] } `)