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}