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}
36
37func (s *Schema) AddPossibleType(name string, def *Definition) {
38	s.PossibleTypes[name] = append(s.PossibleTypes[name], def)
39}
40
41// GetPossibleTypes will enumerate all the definitions for a given interface or union
42func (s *Schema) GetPossibleTypes(def *Definition) []*Definition {
43	if def.Kind == Union {
44		var defs []*Definition
45		for _, t := range def.Types {
46			defs = append(defs, s.Types[t])
47		}
48		return defs
49	}
50
51	return s.PossibleTypes[def.Name]
52}
53
54type SchemaDefinition struct {
55	Description    string
56	Directives     DirectiveList
57	OperationTypes OperationTypeDefinitionList
58	Position       *Position `dump:"-"`
59}
60
61type OperationTypeDefinition struct {
62	Operation Operation
63	Type      string
64	Position  *Position `dump:"-"`
65}