cubefs
302 строки · 4.8 Кб
1package ast
2
3import (
4"github.com/graphql-go/graphql/language/kinds"
5)
6
7type Value interface {
8GetValue() interface{}
9GetKind() string
10GetLoc() *Location
11}
12
13// Ensure that all value types implements Value interface
14var _ Value = (*Variable)(nil)
15var _ Value = (*IntValue)(nil)
16var _ Value = (*FloatValue)(nil)
17var _ Value = (*StringValue)(nil)
18var _ Value = (*BooleanValue)(nil)
19var _ Value = (*EnumValue)(nil)
20var _ Value = (*ListValue)(nil)
21var _ Value = (*ObjectValue)(nil)
22
23// Variable implements Node, Value
24type Variable struct {
25Kind string
26Loc *Location
27Name *Name
28}
29
30func NewVariable(v *Variable) *Variable {
31if v == nil {
32v = &Variable{}
33}
34v.Kind = kinds.Variable
35return v
36}
37
38func (v *Variable) GetKind() string {
39return v.Kind
40}
41
42func (v *Variable) GetLoc() *Location {
43return v.Loc
44}
45
46// GetValue alias to Variable.GetName()
47func (v *Variable) GetValue() interface{} {
48return v.GetName()
49}
50
51func (v *Variable) GetName() interface{} {
52return v.Name
53}
54
55// IntValue implements Node, Value
56type IntValue struct {
57Kind string
58Loc *Location
59Value string
60}
61
62func NewIntValue(v *IntValue) *IntValue {
63if v == nil {
64v = &IntValue{}
65}
66return &IntValue{
67Kind: kinds.IntValue,
68Loc: v.Loc,
69Value: v.Value,
70}
71}
72
73func (v *IntValue) GetKind() string {
74return v.Kind
75}
76
77func (v *IntValue) GetLoc() *Location {
78return v.Loc
79}
80
81func (v *IntValue) GetValue() interface{} {
82return v.Value
83}
84
85// FloatValue implements Node, Value
86type FloatValue struct {
87Kind string
88Loc *Location
89Value string
90}
91
92func NewFloatValue(v *FloatValue) *FloatValue {
93if v == nil {
94v = &FloatValue{}
95}
96return &FloatValue{
97Kind: kinds.FloatValue,
98Loc: v.Loc,
99Value: v.Value,
100}
101}
102
103func (v *FloatValue) GetKind() string {
104return v.Kind
105}
106
107func (v *FloatValue) GetLoc() *Location {
108return v.Loc
109}
110
111func (v *FloatValue) GetValue() interface{} {
112return v.Value
113}
114
115// StringValue implements Node, Value
116type StringValue struct {
117Kind string
118Loc *Location
119Value string
120}
121
122func NewStringValue(v *StringValue) *StringValue {
123if v == nil {
124v = &StringValue{}
125}
126return &StringValue{
127Kind: kinds.StringValue,
128Loc: v.Loc,
129Value: v.Value,
130}
131}
132
133func (v *StringValue) GetKind() string {
134return v.Kind
135}
136
137func (v *StringValue) GetLoc() *Location {
138return v.Loc
139}
140
141func (v *StringValue) GetValue() interface{} {
142return v.Value
143}
144
145// BooleanValue implements Node, Value
146type BooleanValue struct {
147Kind string
148Loc *Location
149Value bool
150}
151
152func NewBooleanValue(v *BooleanValue) *BooleanValue {
153if v == nil {
154v = &BooleanValue{}
155}
156return &BooleanValue{
157Kind: kinds.BooleanValue,
158Loc: v.Loc,
159Value: v.Value,
160}
161}
162
163func (v *BooleanValue) GetKind() string {
164return v.Kind
165}
166
167func (v *BooleanValue) GetLoc() *Location {
168return v.Loc
169}
170
171func (v *BooleanValue) GetValue() interface{} {
172return v.Value
173}
174
175// EnumValue implements Node, Value
176type EnumValue struct {
177Kind string
178Loc *Location
179Value string
180}
181
182func NewEnumValue(v *EnumValue) *EnumValue {
183if v == nil {
184v = &EnumValue{}
185}
186return &EnumValue{
187Kind: kinds.EnumValue,
188Loc: v.Loc,
189Value: v.Value,
190}
191}
192
193func (v *EnumValue) GetKind() string {
194return v.Kind
195}
196
197func (v *EnumValue) GetLoc() *Location {
198return v.Loc
199}
200
201func (v *EnumValue) GetValue() interface{} {
202return v.Value
203}
204
205// ListValue implements Node, Value
206type ListValue struct {
207Kind string
208Loc *Location
209Values []Value
210}
211
212func NewListValue(v *ListValue) *ListValue {
213if v == nil {
214v = &ListValue{}
215}
216return &ListValue{
217Kind: kinds.ListValue,
218Loc: v.Loc,
219Values: v.Values,
220}
221}
222
223func (v *ListValue) GetKind() string {
224return v.Kind
225}
226
227func (v *ListValue) GetLoc() *Location {
228return v.Loc
229}
230
231// GetValue alias to ListValue.GetValues()
232func (v *ListValue) GetValue() interface{} {
233return v.GetValues()
234}
235
236func (v *ListValue) GetValues() interface{} {
237// TODO: verify ObjectValue.GetValue()
238return v.Values
239}
240
241// ObjectValue implements Node, Value
242type ObjectValue struct {
243Kind string
244Loc *Location
245Fields []*ObjectField
246}
247
248func NewObjectValue(v *ObjectValue) *ObjectValue {
249if v == nil {
250v = &ObjectValue{}
251}
252return &ObjectValue{
253Kind: kinds.ObjectValue,
254Loc: v.Loc,
255Fields: v.Fields,
256}
257}
258
259func (v *ObjectValue) GetKind() string {
260return v.Kind
261}
262
263func (v *ObjectValue) GetLoc() *Location {
264return v.Loc
265}
266
267func (v *ObjectValue) GetValue() interface{} {
268// TODO: verify ObjectValue.GetValue()
269return v.Fields
270}
271
272// ObjectField implements Node, Value
273type ObjectField struct {
274Kind string
275Name *Name
276Loc *Location
277Value Value
278}
279
280func NewObjectField(f *ObjectField) *ObjectField {
281if f == nil {
282f = &ObjectField{}
283}
284return &ObjectField{
285Kind: kinds.ObjectField,
286Loc: f.Loc,
287Name: f.Name,
288Value: f.Value,
289}
290}
291
292func (f *ObjectField) GetKind() string {
293return f.Kind
294}
295
296func (f *ObjectField) GetLoc() *Location {
297return f.Loc
298}
299
300func (f *ObjectField) GetValue() interface{} {
301return f.Value
302}
303