...
1 package ast
2
3 type QueryDocument struct {
4 Operations OperationList
5 Fragments FragmentDefinitionList
6 Position *Position `dump:"-"`
7 }
8
9 type SchemaDocument struct {
10 Schema SchemaDefinitionList
11 SchemaExtension SchemaDefinitionList
12 Directives DirectiveDefinitionList
13 Definitions DefinitionList
14 Extensions DefinitionList
15 Position *Position `dump:"-"`
16 }
17
18 func (d *SchemaDocument) Merge(other *SchemaDocument) {
19 d.Schema = append(d.Schema, other.Schema...)
20 d.SchemaExtension = append(d.SchemaExtension, other.SchemaExtension...)
21 d.Directives = append(d.Directives, other.Directives...)
22 d.Definitions = append(d.Definitions, other.Definitions...)
23 d.Extensions = append(d.Extensions, other.Extensions...)
24 }
25
26 type Schema struct {
27 Query *Definition
28 Mutation *Definition
29 Subscription *Definition
30
31 Types map[string]*Definition
32 Directives map[string]*DirectiveDefinition
33
34 PossibleTypes map[string][]*Definition
35 Implements map[string][]*Definition
36 }
37
38 func (s *Schema) AddPossibleType(name string, def *Definition) {
39 s.PossibleTypes[name] = append(s.PossibleTypes[name], def)
40 }
41
42
43 func (s *Schema) GetPossibleTypes(def *Definition) []*Definition {
44 return s.PossibleTypes[def.Name]
45 }
46
47 func (s *Schema) AddImplements(name string, iface *Definition) {
48 s.Implements[name] = append(s.Implements[name], iface)
49 }
50
51
52 func (s *Schema) GetImplements(def *Definition) []*Definition {
53 return s.Implements[def.Name]
54 }
55
56 type SchemaDefinition struct {
57 Description string
58 Directives DirectiveList
59 OperationTypes OperationTypeDefinitionList
60 Position *Position `dump:"-"`
61 }
62
63 type OperationTypeDefinition struct {
64 Operation Operation
65 Type string
66 Position *Position `dump:"-"`
67 }
68
View as plain text