forked from graphql-go/graphql
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist_schema.go
110 lines (97 loc) · 2.18 KB
/
list_schema.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/graphql-go/graphql"
)
type color struct {
Hex string
R int
G int
B int
}
func ListSchemaWithXItems(x int) graphql.Schema {
list := generateXListItems(x)
color := graphql.NewObject(graphql.ObjectConfig{
Name: "Color",
Description: "A color",
Fields: graphql.Fields{
"hex": &graphql.Field{
Type: graphql.NewNonNull(graphql.String),
Description: "Hex color code.",
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if c, ok := p.Source.(color); ok {
return c.Hex, nil
}
return nil, nil
},
},
"r": &graphql.Field{
Type: graphql.NewNonNull(graphql.Int),
Description: "Red value.",
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if c, ok := p.Source.(color); ok {
return c.R, nil
}
return nil, nil
},
},
"g": &graphql.Field{
Type: graphql.NewNonNull(graphql.Int),
Description: "Green value.",
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if c, ok := p.Source.(color); ok {
return c.G, nil
}
return nil, nil
},
},
"b": &graphql.Field{
Type: graphql.NewNonNull(graphql.Int),
Description: "Blue value.",
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if c, ok := p.Source.(color); ok {
return c.B, nil
}
return nil, nil
},
},
},
})
queryType := graphql.NewObject(graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"colors": {
Type: graphql.NewList(color),
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
return list, nil
},
},
},
})
colorSchema, _ := graphql.NewSchema(graphql.SchemaConfig{
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]
}