// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. package generated import ( "bytes" "context" "errors" "sync/atomic" "github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql/introspection" gqlparser "github.com/vektah/gqlparser/v2" "github.com/vektah/gqlparser/v2/ast" ) // NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface. func NewExecutableSchema(cfg Config) graphql.ExecutableSchema { return &executableSchema{ schema: cfg.Schema, resolvers: cfg.Resolvers, directives: cfg.Directives, complexity: cfg.Complexity, } } type Config struct { Schema *ast.Schema Resolvers ResolverRoot Directives DirectiveRoot Complexity ComplexityRoot } type ResolverRoot interface { Mutation() MutationResolver Query() QueryResolver } type DirectiveRoot struct { } type ComplexityRoot struct { AuthUser struct { DisplayName func(childComplexity int) int Email func(childComplexity int) int ID func(childComplexity int) int RoleID func(childComplexity int) int } Mutation struct { Login func(childComplexity int, email string, pwd string) int Logout func(childComplexity int) int } Query struct { Me func(childComplexity int) int } } type executableSchema struct { schema *ast.Schema resolvers ResolverRoot directives DirectiveRoot complexity ComplexityRoot } func (e *executableSchema) Schema() *ast.Schema { if e.schema != nil { return e.schema } return parsedSchema } func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) { ec := executionContext{nil, e, 0, 0, nil} _ = ec switch typeName + "." + field { case "AuthUser.displayName": if e.complexity.AuthUser.DisplayName == nil { break } return e.complexity.AuthUser.DisplayName(childComplexity), true case "AuthUser.email": if e.complexity.AuthUser.Email == nil { break } return e.complexity.AuthUser.Email(childComplexity), true case "AuthUser.id": if e.complexity.AuthUser.ID == nil { break } return e.complexity.AuthUser.ID(childComplexity), true case "AuthUser.roleID": if e.complexity.AuthUser.RoleID == nil { break } return e.complexity.AuthUser.RoleID(childComplexity), true case "Mutation.login": if e.complexity.Mutation.Login == nil { break } args, err := ec.field_Mutation_login_args(context.TODO(), rawArgs) if err != nil { return 0, false } return e.complexity.Mutation.Login(childComplexity, args["email"].(string), args["pwd"].(string)), true case "Mutation.logout": if e.complexity.Mutation.Logout == nil { break } return e.complexity.Mutation.Logout(childComplexity), true case "Query.me": if e.complexity.Query.Me == nil { break } return e.complexity.Query.Me(childComplexity), true } return 0, false } func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler { opCtx := graphql.GetOperationContext(ctx) ec := executionContext{opCtx, e, 0, 0, make(chan graphql.DeferredResult)} inputUnmarshalMap := graphql.BuildUnmarshalerMap() first := true switch opCtx.Operation.Operation { case ast.Query: return func(ctx context.Context) *graphql.Response { var response graphql.Response var data graphql.Marshaler if first { first = false ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap) data = ec._Query(ctx, opCtx.Operation.SelectionSet) } else { if atomic.LoadInt32(&ec.pendingDeferred) > 0 { result := <-ec.deferredResults atomic.AddInt32(&ec.pendingDeferred, -1) data = result.Result response.Path = result.Path response.Label = result.Label response.Errors = result.Errors } else { return nil } } var buf bytes.Buffer data.MarshalGQL(&buf) response.Data = buf.Bytes() if atomic.LoadInt32(&ec.deferred) > 0 { hasNext := atomic.LoadInt32(&ec.pendingDeferred) > 0 response.HasNext = &hasNext } return &response } case ast.Mutation: return func(ctx context.Context) *graphql.Response { if !first { return nil } first = false ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap) data := ec._Mutation(ctx, opCtx.Operation.SelectionSet) var buf bytes.Buffer data.MarshalGQL(&buf) return &graphql.Response{ Data: buf.Bytes(), } } default: return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation")) } } type executionContext struct { *graphql.OperationContext *executableSchema deferred int32 pendingDeferred int32 deferredResults chan graphql.DeferredResult } func (ec *executionContext) processDeferredGroup(dg graphql.DeferredGroup) { atomic.AddInt32(&ec.pendingDeferred, 1) go func() { ctx := graphql.WithFreshResponseContext(dg.Context) dg.FieldSet.Dispatch(ctx) ds := graphql.DeferredResult{ Path: dg.Path, Label: dg.Label, Result: dg.FieldSet, Errors: graphql.GetErrors(ctx), } // null fields should bubble up if dg.FieldSet.Invalids > 0 { ds.Result = graphql.Null } ec.deferredResults <- ds }() } func (ec *executionContext) introspectSchema() (*introspection.Schema, error) { if ec.DisableIntrospection { return nil, errors.New("introspection disabled") } return introspection.WrapSchema(ec.Schema()), nil } func (ec *executionContext) introspectType(name string) (*introspection.Type, error) { if ec.DisableIntrospection { return nil, errors.New("introspection disabled") } return introspection.WrapTypeFromDef(ec.Schema(), ec.Schema().Types[name]), nil } var sources = []*ast.Source{ {Name: "../account.graphql", Input: `extend type Mutation { login(email: String!, pwd: String!): AuthUser! logout: Boolean! } extend type Query { me: AuthUser } type AuthUser { id: ID! email: String! displayName: String! roleID: Int! } `, BuiltIn: false}, {Name: "../root.graphql", Input: `# GraphQL schema example # # https://gqlgen.com/getting-started/ type Mutation type Query """ Maps a Time GraphQL scalar to a Go time.Time struct. """ scalar Time """ type Map(Go type: map[string]interface{}) """ scalar Map """ Go type interface{} """ scalar Any scalar Void """ directive to map Go type type User @goModel(model: "github.com/my/app/models.User") { id: ID! @goField(name: "todoId") name: String! @goField(forceResolver: true) @goTag(key: "xorm", value: "-") @goTag(key: "yaml") } """ directive @goModel( model: String models: [String!] forceGenerate: Boolean ) on OBJECT | INPUT_OBJECT | SCALAR | ENUM | INTERFACE | UNION """ directive to map Go type """ directive @goField( forceResolver: Boolean name: String omittable: Boolean ) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION directive @goTag(key: String!, value: String) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION `, BuiltIn: false}, } var parsedSchema = gqlparser.MustLoadSchema(sources...)