blob: b7657d62ef27f7ccfb6a882fe708f467297e1ba5 (
plain) (
tree)
|
|
package ast
type QueryDocument struct {
Operations OperationList
Fragments FragmentDefinitionList
Position *Position `dump:"-"`
}
type SchemaDocument struct {
Schema SchemaDefinitionList
SchemaExtension SchemaDefinitionList
Directives DirectiveDefinitionList
Definitions DefinitionList
Extensions DefinitionList
Position *Position `dump:"-"`
}
func (d *SchemaDocument) Merge(other *SchemaDocument) {
d.Schema = append(d.Schema, other.Schema...)
d.SchemaExtension = append(d.SchemaExtension, other.SchemaExtension...)
d.Directives = append(d.Directives, other.Directives...)
d.Definitions = append(d.Definitions, other.Definitions...)
d.Extensions = append(d.Extensions, other.Extensions...)
}
type Schema struct {
Query *Definition
Mutation *Definition
Subscription *Definition
Types map[string]*Definition
Directives map[string]*DirectiveDefinition
PossibleTypes map[string][]*Definition
}
func (s *Schema) AddPossibleType(name string, def *Definition) {
s.PossibleTypes[name] = append(s.PossibleTypes[name], def)
}
// GetPossibleTypes will enumerate all the definitions for a given interface or union
func (s *Schema) GetPossibleTypes(def *Definition) []*Definition {
if def.Kind == Union {
var defs []*Definition
for _, t := range def.Types {
defs = append(defs, s.Types[t])
}
return defs
}
return s.PossibleTypes[def.Name]
}
type SchemaDefinition struct {
Description string
Directives DirectiveList
OperationTypes OperationTypeDefinitionList
Position *Position `dump:"-"`
}
type OperationTypeDefinition struct {
Operation Operation
Type string
Position *Position `dump:"-"`
}
|