document.go

 1package ast
 2
 3type QueryDocument struct {
 4	Operations OperationList
 5	Fragments  FragmentDefinitionList
 6	Position   *Position `dump:"-"`
 7}
 8
 9type SchemaDocument struct {
10	Schema          SchemaDefinitionList
11	SchemaExtension SchemaDefinitionList
12	Directives      DirectiveDefinitionList
13	Definitions     DefinitionList
14	Extensions      DefinitionList
15	Position        *Position `dump:"-"`
16}
17
18func (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
26type 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
38func (s *Schema) AddPossibleType(name string, def *Definition) {
39	s.PossibleTypes[name] = append(s.PossibleTypes[name], def)
40}
41
42// GetPossibleTypes will enumerate all the definitions for a given interface or union
43func (s *Schema) GetPossibleTypes(def *Definition) []*Definition {
44	return s.PossibleTypes[def.Name]
45}
46
47func (s *Schema) AddImplements(name string, iface *Definition) {
48	s.Implements[name] = append(s.Implements[name], iface)
49}
50
51// GetImplements returns all the interface and union definitions that the given definition satisfies
52func (s *Schema) GetImplements(def *Definition) []*Definition {
53	return s.Implements[def.Name]
54}
55
56type SchemaDefinition struct {
57	Description    string
58	Directives     DirectiveList
59	OperationTypes OperationTypeDefinitionList
60	Position       *Position `dump:"-"`
61}
62
63type OperationTypeDefinition struct {
64	Operation Operation
65	Type      string
66	Position  *Position `dump:"-"`
67}