jsonw.go

 1package graphql
 2
 3import (
 4	"io"
 5)
 6
 7var nullLit = []byte(`null`)
 8var trueLit = []byte(`true`)
 9var falseLit = []byte(`false`)
10var openBrace = []byte(`{`)
11var closeBrace = []byte(`}`)
12var openBracket = []byte(`[`)
13var closeBracket = []byte(`]`)
14var colon = []byte(`:`)
15var comma = []byte(`,`)
16
17var Null = &lit{nullLit}
18var True = &lit{trueLit}
19var False = &lit{falseLit}
20
21type Marshaler interface {
22	MarshalGQL(w io.Writer)
23}
24
25type Unmarshaler interface {
26	UnmarshalGQL(v interface{}) error
27}
28
29type WriterFunc func(writer io.Writer)
30
31func (f WriterFunc) MarshalGQL(w io.Writer) {
32	f(w)
33}
34
35type Array []Marshaler
36
37func (a Array) MarshalGQL(writer io.Writer) {
38	writer.Write(openBracket)
39	for i, val := range a {
40		if i != 0 {
41			writer.Write(comma)
42		}
43		val.MarshalGQL(writer)
44	}
45	writer.Write(closeBracket)
46}
47
48type lit struct{ b []byte }
49
50func (l lit) MarshalGQL(w io.Writer) {
51	w.Write(l.b)
52}