This repository has been archived by the owner on Aug 23, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo.go
121 lines (101 loc) · 1.94 KB
/
demo.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
111
112
113
114
115
116
117
118
119
120
121
package main
import (
"context"
"time"
)
var schemaAst string = `
type Person {
name: String
steps: Int
favoriteMonths: [String]
parents: [Person]
wordsSaid: [String]
stuff: [[[[String]]]]
}
type RootQuery {
allPeople(initialSteps: Int): [Person]
person(name: String): Person
}
schema {
query: RootQuery
}
`
var jerry = &PersonResolver{
name: "Jerry",
steps: 1000,
}
var mary = &PersonResolver{
name: "Mary",
steps: 2000,
}
var parents = []*PersonResolver{
jerry,
mary,
}
func (p *PersonResolver) Stuff() [][][][]string {
return nil
}
type RootQueryResolver struct{}
func (r *RootQueryResolver) AllPeople(args *struct{ InitialSteps int }) []*PersonResolver {
if args == nil {
return nil
}
return []*PersonResolver{
{name: "Tommy", steps: args.InitialSteps, parents: parents},
{name: "Billy", steps: args.InitialSteps * 2, parents: parents},
}
}
func (r *RootQueryResolver) Person(args *struct{ Name string }) *PersonResolver {
if args == nil || args.Name == "" {
return nil
}
return &PersonResolver{
name: args.Name,
parents: parents,
}
}
type PersonResolver struct {
name string
steps int
parents []*PersonResolver
}
func (r *PersonResolver) Name() string {
return r.name
}
func (r *PersonResolver) Parents() []*PersonResolver {
return r.parents
}
func (r *PersonResolver) FavoriteMonths(ctx context.Context) <-chan string {
ch := make(chan string)
result := []string{
"January",
"March",
"August",
"December",
}
go func() {
for _, res := range result {
select {
case ch <- res:
case <-ctx.Done():
return
}
}
}()
return ch
}
func (r *PersonResolver) Steps(ctx context.Context, output chan<- int) error {
done := ctx.Done()
for {
output <- r.steps
r.steps++
select {
case <-done:
return nil
case <-time.After(time.Duration(1) * time.Second):
}
}
}
func (r *PersonResolver) WordsSaid(ctx context.Context, output chan<- (<-chan string)) error {
return nil
}