-
Notifications
You must be signed in to change notification settings - Fork 0
/
list.go
110 lines (97 loc) · 2.01 KB
/
list.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package benchutil
import (
"fmt"
"github.com/rigglo/gql"
)
type color struct {
Hex string
R int
G int
B int
}
func ListSchemaWithXItems(x int) *gql.Schema {
list := generateXListItems(x)
color := &gql.Object{
Name: "Color",
Description: "A color",
Fields: gql.Fields{
"hex": &gql.Field{
Type: gql.NewNonNull(gql.String),
Description: "Hex color code.",
Resolver: func(ctx gql.Context) (interface{}, error) {
if c, ok := ctx.Parent().(color); ok {
return c.Hex, nil
}
return nil, nil
},
},
"r": &gql.Field{
Type: gql.NewNonNull(gql.Int),
Description: "Red value.",
Resolver: func(ctx gql.Context) (interface{}, error) {
if c, ok := ctx.Parent().(color); ok {
return c.R, nil
}
return nil, nil
},
},
"g": &gql.Field{
Type: gql.NewNonNull(gql.Int),
Description: "Green value.",
Resolver: func(ctx gql.Context) (interface{}, error) {
if c, ok := ctx.Parent().(color); ok {
return c.G, nil
}
return nil, nil
},
},
"b": &gql.Field{
Type: gql.NewNonNull(gql.Int),
Description: "Blue value.",
Resolver: func(ctx gql.Context) (interface{}, error) {
if c, ok := ctx.Parent().(color); ok {
return c.B, nil
}
return nil, nil
},
},
},
}
queryType := &gql.Object{
Name: "Query",
Fields: gql.Fields{
"colors": {
Type: gql.NewList(color),
Resolver: func(ctx gql.Context) (interface{}, error) {
return list, nil
},
},
},
}
colorSchema := &gql.Schema{
Query: queryType,
}
return colorSchema
}
var colors []color
func init() {
colors = make([]color, 0, 256*16*16)
for r := 0; r < 256; r++ {
for g := 0; g < 16; g++ {
for b := 0; b < 16; b++ {
colors = append(colors, color{
Hex: fmt.Sprintf("#%x%x%x", r, g, b),
R: r,
G: g,
B: b,
})
}
}
}
}
func generateXListItems(x int) []color {
if x > len(colors) {
x = len(colors)
}
return colors[0:x]
}