...
1 package ast
2
3 import (
4 "encoding/json"
5 )
6
7 func UnmarshalSelectionSet(b []byte) (SelectionSet, error) {
8 var tmp []json.RawMessage
9
10 if err := json.Unmarshal(b, &tmp); err != nil {
11 return nil, err
12 }
13
14 var result = make([]Selection, 0)
15 for _, item := range tmp {
16 var field Field
17 if err := json.Unmarshal(item, &field); err == nil {
18 result = append(result, &field)
19 continue
20 }
21 var fragmentSpread FragmentSpread
22 if err := json.Unmarshal(item, &fragmentSpread); err == nil {
23 result = append(result, &fragmentSpread)
24 continue
25 }
26 var inlineFragment InlineFragment
27 if err := json.Unmarshal(item, &inlineFragment); err == nil {
28 result = append(result, &inlineFragment)
29 continue
30 }
31 }
32
33 return result, nil
34 }
35
36 func (f *FragmentDefinition) UnmarshalJSON(b []byte) error {
37 var tmp map[string]json.RawMessage
38 if err := json.Unmarshal(b, &tmp); err != nil {
39 return err
40 }
41 for k := range tmp {
42 switch k {
43 case "Name":
44 err := json.Unmarshal(tmp[k], &f.Name)
45 if err != nil {
46 return err
47 }
48 case "VariableDefinition":
49 err := json.Unmarshal(tmp[k], &f.VariableDefinition)
50 if err != nil {
51 return err
52 }
53 case "TypeCondition":
54 err := json.Unmarshal(tmp[k], &f.TypeCondition)
55 if err != nil {
56 return err
57 }
58 case "Directives":
59 err := json.Unmarshal(tmp[k], &f.Directives)
60 if err != nil {
61 return err
62 }
63 case "SelectionSet":
64 ss, err := UnmarshalSelectionSet(tmp[k])
65 if err != nil {
66 return err
67 }
68 f.SelectionSet = ss
69 case "Definition":
70 err := json.Unmarshal(tmp[k], &f.Definition)
71 if err != nil {
72 return err
73 }
74 case "Position":
75 err := json.Unmarshal(tmp[k], &f.Position)
76 if err != nil {
77 return err
78 }
79 }
80 }
81 return nil
82 }
83
84 func (f *InlineFragment) UnmarshalJSON(b []byte) error {
85 var tmp map[string]json.RawMessage
86 if err := json.Unmarshal(b, &tmp); err != nil {
87 return err
88 }
89 for k := range tmp {
90 switch k {
91 case "TypeCondition":
92 err := json.Unmarshal(tmp[k], &f.TypeCondition)
93 if err != nil {
94 return err
95 }
96 case "Directives":
97 err := json.Unmarshal(tmp[k], &f.Directives)
98 if err != nil {
99 return err
100 }
101 case "SelectionSet":
102 ss, err := UnmarshalSelectionSet(tmp[k])
103 if err != nil {
104 return err
105 }
106 f.SelectionSet = ss
107 case "ObjectDefinition":
108 err := json.Unmarshal(tmp[k], &f.ObjectDefinition)
109 if err != nil {
110 return err
111 }
112 case "Position":
113 err := json.Unmarshal(tmp[k], &f.Position)
114 if err != nil {
115 return err
116 }
117 }
118 }
119 return nil
120 }
121
122 func (f *OperationDefinition) UnmarshalJSON(b []byte) error {
123 var tmp map[string]json.RawMessage
124 if err := json.Unmarshal(b, &tmp); err != nil {
125 return err
126 }
127 for k := range tmp {
128 switch k {
129 case "Operation":
130 err := json.Unmarshal(tmp[k], &f.Operation)
131 if err != nil {
132 return err
133 }
134 case "Name":
135 err := json.Unmarshal(tmp[k], &f.Name)
136 if err != nil {
137 return err
138 }
139 case "VariableDefinitions":
140 err := json.Unmarshal(tmp[k], &f.VariableDefinitions)
141 if err != nil {
142 return err
143 }
144 case "Directives":
145 err := json.Unmarshal(tmp[k], &f.Directives)
146 if err != nil {
147 return err
148 }
149 case "SelectionSet":
150 ss, err := UnmarshalSelectionSet(tmp[k])
151 if err != nil {
152 return err
153 }
154 f.SelectionSet = ss
155 case "Position":
156 err := json.Unmarshal(tmp[k], &f.Position)
157 if err != nil {
158 return err
159 }
160 }
161 }
162 return nil
163 }
164
165 func (f *Field) UnmarshalJSON(b []byte) error {
166 var tmp map[string]json.RawMessage
167 if err := json.Unmarshal(b, &tmp); err != nil {
168 return err
169 }
170 for k := range tmp {
171 switch k {
172 case "Alias":
173 err := json.Unmarshal(tmp[k], &f.Alias)
174 if err != nil {
175 return err
176 }
177 case "Name":
178 err := json.Unmarshal(tmp[k], &f.Name)
179 if err != nil {
180 return err
181 }
182 case "Arguments":
183 err := json.Unmarshal(tmp[k], &f.Arguments)
184 if err != nil {
185 return err
186 }
187 case "Directives":
188 err := json.Unmarshal(tmp[k], &f.Directives)
189 if err != nil {
190 return err
191 }
192 case "SelectionSet":
193 ss, err := UnmarshalSelectionSet(tmp[k])
194 if err != nil {
195 return err
196 }
197 f.SelectionSet = ss
198 case "Position":
199 err := json.Unmarshal(tmp[k], &f.Position)
200 if err != nil {
201 return err
202 }
203 case "Definition":
204 err := json.Unmarshal(tmp[k], &f.Definition)
205 if err != nil {
206 return err
207 }
208 case "ObjectDefinition":
209 err := json.Unmarshal(tmp[k], &f.ObjectDefinition)
210 if err != nil {
211 return err
212 }
213 }
214 }
215 return nil
216 }
217
View as plain text