schema.go

 1package introspection
 2
 3import (
 4	"strings"
 5
 6	"github.com/vektah/gqlparser/ast"
 7)
 8
 9type Schema struct {
10	schema *ast.Schema
11}
12
13func (s *Schema) Types() []Type {
14	types := make([]Type, 0, len(s.schema.Types))
15	for _, typ := range s.schema.Types {
16		if strings.HasPrefix(typ.Name, "__") {
17			continue
18		}
19		types = append(types, *WrapTypeFromDef(s.schema, typ))
20	}
21	return types
22}
23
24func (s *Schema) QueryType() *Type {
25	return WrapTypeFromDef(s.schema, s.schema.Query)
26}
27
28func (s *Schema) MutationType() *Type {
29	return WrapTypeFromDef(s.schema, s.schema.Mutation)
30}
31
32func (s *Schema) SubscriptionType() *Type {
33	return WrapTypeFromDef(s.schema, s.schema.Subscription)
34}
35
36func (s *Schema) Directives() []Directive {
37	res := make([]Directive, 0, len(s.schema.Directives))
38
39	for _, d := range s.schema.Directives {
40		res = append(res, s.directiveFromDef(d))
41	}
42
43	return res
44}
45
46func (s *Schema) directiveFromDef(d *ast.DirectiveDefinition) Directive {
47	locs := make([]string, len(d.Locations))
48	for i, loc := range d.Locations {
49		locs[i] = string(loc)
50	}
51
52	args := make([]InputValue, len(d.Arguments))
53	for i, arg := range d.Arguments {
54		args[i] = InputValue{
55			Name:         arg.Name,
56			Description:  arg.Description,
57			DefaultValue: defaultValue(arg.DefaultValue),
58			Type:         WrapTypeFromType(s.schema, arg.Type),
59		}
60	}
61
62	return Directive{
63		Name:        d.Name,
64		Description: d.Description,
65		Locations:   locs,
66		Args:        args,
67	}
68}