aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/99designs/gqlgen/graphql/introspection/schema.go
blob: b5d2c4822466acf661c2f8734fc70164d2326fbb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package introspection

import (
	"strings"

	"github.com/vektah/gqlparser/ast"
)

type Schema struct {
	schema *ast.Schema
}

func (s *Schema) Types() []Type {
	var types []Type
	for _, typ := range s.schema.Types {
		if strings.HasPrefix(typ.Name, "__") {
			continue
		}
		types = append(types, *WrapTypeFromDef(s.schema, typ))
	}
	return types
}

func (s *Schema) QueryType() *Type {
	return WrapTypeFromDef(s.schema, s.schema.Query)
}

func (s *Schema) MutationType() *Type {
	return WrapTypeFromDef(s.schema, s.schema.Mutation)
}

func (s *Schema) SubscriptionType() *Type {
	return WrapTypeFromDef(s.schema, s.schema.Subscription)
}

func (s *Schema) Directives() []Directive {
	var res []Directive

	for _, d := range s.schema.Directives {
		res = append(res, s.directiveFromDef(d))
	}

	return res
}

func (s *Schema) directiveFromDef(d *ast.DirectiveDefinition) Directive {
	var locs []string
	for _, loc := range d.Locations {
		locs = append(locs, string(loc))
	}

	var args []InputValue
	for _, arg := range d.Arguments {
		args = append(args, InputValue{
			Name:         arg.Name,
			Description:  arg.Description,
			DefaultValue: defaultValue(arg.DefaultValue),
			Type:         WrapTypeFromType(s.schema, arg.Type),
		})
	}

	return Directive{
		Name:        d.Name,
		Description: d.Description,
		Locations:   locs,
		Args:        args,
	}
}