262 lines
6.0 KiB
Go
262 lines
6.0 KiB
Go
|
// 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 {
|
||
|
Mutation struct {
|
||
|
Login func(childComplexity int, username string, email string) int
|
||
|
Logout func(childComplexity int) int
|
||
|
}
|
||
|
|
||
|
Query struct {
|
||
|
HeartBeat 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 "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["username"].(string), args["email"].(string)), true
|
||
|
|
||
|
case "Mutation.logout":
|
||
|
if e.complexity.Mutation.Logout == nil {
|
||
|
break
|
||
|
}
|
||
|
|
||
|
return e.complexity.Mutation.Logout(childComplexity), true
|
||
|
|
||
|
case "Query.heartBeat":
|
||
|
if e.complexity.Query.HeartBeat == nil {
|
||
|
break
|
||
|
}
|
||
|
|
||
|
return e.complexity.Query.HeartBeat(childComplexity), true
|
||
|
|
||
|
}
|
||
|
return 0, false
|
||
|
}
|
||
|
|
||
|
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
|
||
|
rc := graphql.GetOperationContext(ctx)
|
||
|
ec := executionContext{rc, e, 0, 0, make(chan graphql.DeferredResult)}
|
||
|
inputUnmarshalMap := graphql.BuildUnmarshalerMap()
|
||
|
first := true
|
||
|
|
||
|
switch rc.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, rc.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, rc.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: "../auth.graphql", Input: `extend type Mutation {
|
||
|
login(username: String!, email: String!): Boolean!
|
||
|
logout: Boolean!
|
||
|
}
|
||
|
`, BuiltIn: false},
|
||
|
{Name: "../index.graphql", Input: `# GraphQL schema example
|
||
|
#
|
||
|
# https://gqlgen.com/getting-started/
|
||
|
|
||
|
type Mutation
|
||
|
|
||
|
type Query {
|
||
|
heartBeat: Boolean!
|
||
|
}
|
||
|
|
||
|
"""
|
||
|
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...)
|