definitions.go

  1package ast
  2
  3import (
  4	"github.com/graphql-go/graphql/language/kinds"
  5)
  6
  7type Definition interface {
  8	GetOperation() string
  9	GetVariableDefinitions() []*VariableDefinition
 10	GetSelectionSet() *SelectionSet
 11	GetKind() string
 12	GetLoc() *Location
 13}
 14
 15// Ensure that all definition types implements Definition interface
 16var _ Definition = (*OperationDefinition)(nil)
 17var _ Definition = (*FragmentDefinition)(nil)
 18var _ Definition = (TypeSystemDefinition)(nil) // experimental non-spec addition.
 19
 20// Note: subscription is an experimental non-spec addition.
 21const (
 22	OperationTypeQuery        = "query"
 23	OperationTypeMutation     = "mutation"
 24	OperationTypeSubscription = "subscription"
 25)
 26
 27// OperationDefinition implements Node, Definition
 28type OperationDefinition struct {
 29	Kind                string
 30	Loc                 *Location
 31	Operation           string
 32	Name                *Name
 33	VariableDefinitions []*VariableDefinition
 34	Directives          []*Directive
 35	SelectionSet        *SelectionSet
 36}
 37
 38func NewOperationDefinition(op *OperationDefinition) *OperationDefinition {
 39	if op == nil {
 40		op = &OperationDefinition{}
 41	}
 42	return &OperationDefinition{
 43		Kind:                kinds.OperationDefinition,
 44		Loc:                 op.Loc,
 45		Operation:           op.Operation,
 46		Name:                op.Name,
 47		VariableDefinitions: op.VariableDefinitions,
 48		Directives:          op.Directives,
 49		SelectionSet:        op.SelectionSet,
 50	}
 51}
 52
 53func (op *OperationDefinition) GetKind() string {
 54	return op.Kind
 55}
 56
 57func (op *OperationDefinition) GetLoc() *Location {
 58	return op.Loc
 59}
 60
 61func (op *OperationDefinition) GetOperation() string {
 62	return op.Operation
 63}
 64
 65func (op *OperationDefinition) GetName() *Name {
 66	return op.Name
 67}
 68
 69func (op *OperationDefinition) GetVariableDefinitions() []*VariableDefinition {
 70	return op.VariableDefinitions
 71}
 72
 73func (op *OperationDefinition) GetDirectives() []*Directive {
 74	return op.Directives
 75}
 76
 77func (op *OperationDefinition) GetSelectionSet() *SelectionSet {
 78	return op.SelectionSet
 79}
 80
 81// FragmentDefinition implements Node, Definition
 82type FragmentDefinition struct {
 83	Kind                string
 84	Loc                 *Location
 85	Operation           string
 86	Name                *Name
 87	VariableDefinitions []*VariableDefinition
 88	TypeCondition       *Named
 89	Directives          []*Directive
 90	SelectionSet        *SelectionSet
 91}
 92
 93func NewFragmentDefinition(fd *FragmentDefinition) *FragmentDefinition {
 94	if fd == nil {
 95		fd = &FragmentDefinition{}
 96	}
 97	return &FragmentDefinition{
 98		Kind:                kinds.FragmentDefinition,
 99		Loc:                 fd.Loc,
100		Operation:           fd.Operation,
101		Name:                fd.Name,
102		VariableDefinitions: fd.VariableDefinitions,
103		TypeCondition:       fd.TypeCondition,
104		Directives:          fd.Directives,
105		SelectionSet:        fd.SelectionSet,
106	}
107}
108
109func (fd *FragmentDefinition) GetKind() string {
110	return fd.Kind
111}
112
113func (fd *FragmentDefinition) GetLoc() *Location {
114	return fd.Loc
115}
116
117func (fd *FragmentDefinition) GetOperation() string {
118	return fd.Operation
119}
120
121func (fd *FragmentDefinition) GetName() *Name {
122	return fd.Name
123}
124
125func (fd *FragmentDefinition) GetVariableDefinitions() []*VariableDefinition {
126	return fd.VariableDefinitions
127}
128
129func (fd *FragmentDefinition) GetSelectionSet() *SelectionSet {
130	return fd.SelectionSet
131}
132
133// VariableDefinition implements Node
134type VariableDefinition struct {
135	Kind         string
136	Loc          *Location
137	Variable     *Variable
138	Type         Type
139	DefaultValue Value
140}
141
142func NewVariableDefinition(vd *VariableDefinition) *VariableDefinition {
143	if vd == nil {
144		vd = &VariableDefinition{}
145	}
146	return &VariableDefinition{
147		Kind:         kinds.VariableDefinition,
148		Loc:          vd.Loc,
149		Variable:     vd.Variable,
150		Type:         vd.Type,
151		DefaultValue: vd.DefaultValue,
152	}
153}
154
155func (vd *VariableDefinition) GetKind() string {
156	return vd.Kind
157}
158
159func (vd *VariableDefinition) GetLoc() *Location {
160	return vd.Loc
161}
162
163// TypeExtensionDefinition implements Node, Definition
164type TypeExtensionDefinition struct {
165	Kind       string
166	Loc        *Location
167	Definition *ObjectDefinition
168}
169
170func NewTypeExtensionDefinition(def *TypeExtensionDefinition) *TypeExtensionDefinition {
171	if def == nil {
172		def = &TypeExtensionDefinition{}
173	}
174	return &TypeExtensionDefinition{
175		Kind:       kinds.TypeExtensionDefinition,
176		Loc:        def.Loc,
177		Definition: def.Definition,
178	}
179}
180
181func (def *TypeExtensionDefinition) GetKind() string {
182	return def.Kind
183}
184
185func (def *TypeExtensionDefinition) GetLoc() *Location {
186	return def.Loc
187}
188
189func (def *TypeExtensionDefinition) GetVariableDefinitions() []*VariableDefinition {
190	return []*VariableDefinition{}
191}
192
193func (def *TypeExtensionDefinition) GetSelectionSet() *SelectionSet {
194	return &SelectionSet{}
195}
196
197func (def *TypeExtensionDefinition) GetOperation() string {
198	return ""
199}
200
201// DirectiveDefinition implements Node, Definition
202type DirectiveDefinition struct {
203	Kind        string
204	Loc         *Location
205	Name        *Name
206	Description *StringValue
207	Arguments   []*InputValueDefinition
208	Locations   []*Name
209}
210
211func NewDirectiveDefinition(def *DirectiveDefinition) *DirectiveDefinition {
212	if def == nil {
213		def = &DirectiveDefinition{}
214	}
215	return &DirectiveDefinition{
216		Kind:        kinds.DirectiveDefinition,
217		Loc:         def.Loc,
218		Name:        def.Name,
219		Description: def.Description,
220		Arguments:   def.Arguments,
221		Locations:   def.Locations,
222	}
223}
224
225func (def *DirectiveDefinition) GetKind() string {
226	return def.Kind
227}
228
229func (def *DirectiveDefinition) GetLoc() *Location {
230	return def.Loc
231}
232
233func (def *DirectiveDefinition) GetVariableDefinitions() []*VariableDefinition {
234	return []*VariableDefinition{}
235}
236
237func (def *DirectiveDefinition) GetSelectionSet() *SelectionSet {
238	return &SelectionSet{}
239}
240
241func (def *DirectiveDefinition) GetOperation() string {
242	return ""
243}
244
245func (def *DirectiveDefinition) GetDescription() *StringValue {
246	return def.Description
247}