forked from wundergraph/graphql-go-tools
-
Notifications
You must be signed in to change notification settings - Fork 4
/
ast_val_list_value.go
45 lines (39 loc) · 1.09 KB
/
ast_val_list_value.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package ast
import "github.com/TykTechnologies/graphql-go-tools/v2/pkg/lexer/position"
type ListValue struct {
LBRACK position.Position // [
Refs []int // Value
RBRACK position.Position // ]
}
func (d *Document) CopyListValue(ref int) int {
refs := d.NewEmptyRefs()
for _, r := range d.ListValues[ref].Refs {
refs = append(refs, d.CopyValue(r))
}
return d.AddListValue(ListValue{
Refs: refs,
})
}
func (d *Document) ListValuesAreEqual(left, right int) bool {
leftValues, rightValues := d.ListValues[left].Refs, d.ListValues[right].Refs
if len(leftValues) != len(rightValues) {
return false
}
for i := 0; i < len(leftValues); i++ {
left, right = leftValues[i], rightValues[i]
leftValue, rightValue := d.Value(left), d.Value(right)
if !d.ValuesAreEqual(leftValue, rightValue) {
return false
}
}
return true
}
func (d *Document) AddListValue(value ListValue) (ref int) {
d.ListValues = append(d.ListValues, value)
return len(d.ListValues) - 1
}
func (d *Document) ImportListValue(valueRefs []int) (ref int) {
return d.AddListValue(ListValue{
Refs: valueRefs,
})
}