@@ -22,75 +22,114 @@ func coerceInt(value interface{}) interface{} {
22
22
}
23
23
return 0
24
24
case * bool :
25
+ if value == nil {
26
+ return nil
27
+ }
25
28
return coerceInt (* value )
26
29
case int :
27
30
if value < int (math .MinInt32 ) || value > int (math .MaxInt32 ) {
28
31
return nil
29
32
}
30
33
return value
31
34
case * int :
35
+ if value == nil {
36
+ return nil
37
+ }
32
38
return coerceInt (* value )
33
39
case int8 :
34
40
return int (value )
35
41
case * int8 :
42
+ if value == nil {
43
+ return nil
44
+ }
36
45
return int (* value )
37
46
case int16 :
38
47
return int (value )
39
48
case * int16 :
49
+ if value == nil {
50
+ return nil
51
+ }
40
52
return int (* value )
41
53
case int32 :
42
54
return int (value )
43
55
case * int32 :
56
+ if value == nil {
57
+ return nil
58
+ }
44
59
return int (* value )
45
60
case int64 :
46
61
if value < int64 (math .MinInt32 ) || value > int64 (math .MaxInt32 ) {
47
62
return nil
48
63
}
49
64
return int (value )
50
65
case * int64 :
66
+ if value == nil {
67
+ return nil
68
+ }
51
69
return coerceInt (* value )
52
70
case uint :
53
71
if value > math .MaxInt32 {
54
72
return nil
55
73
}
56
74
return int (value )
57
75
case * uint :
76
+ if value == nil {
77
+ return nil
78
+ }
58
79
return coerceInt (* value )
59
80
case uint8 :
60
81
return int (value )
61
82
case * uint8 :
83
+ if value == nil {
84
+ return nil
85
+ }
62
86
return int (* value )
63
87
case uint16 :
64
88
return int (value )
65
89
case * uint16 :
90
+ if value == nil {
91
+ return nil
92
+ }
66
93
return int (* value )
67
94
case uint32 :
68
95
if value > uint32 (math .MaxInt32 ) {
69
96
return nil
70
97
}
71
98
return int (value )
72
99
case * uint32 :
100
+ if value == nil {
101
+ return nil
102
+ }
73
103
return coerceInt (* value )
74
104
case uint64 :
75
105
if value > uint64 (math .MaxInt32 ) {
76
106
return nil
77
107
}
78
108
return int (value )
79
109
case * uint64 :
110
+ if value == nil {
111
+ return nil
112
+ }
80
113
return coerceInt (* value )
81
114
case float32 :
82
115
if value < float32 (math .MinInt32 ) || value > float32 (math .MaxInt32 ) {
83
116
return nil
84
117
}
85
118
return int (value )
86
119
case * float32 :
120
+ if value == nil {
121
+ return nil
122
+ }
87
123
return coerceInt (* value )
88
124
case float64 :
89
125
if value < float64 (math .MinInt32 ) || value > float64 (math .MaxInt32 ) {
90
126
return nil
91
127
}
92
128
return int (value )
93
129
case * float64 :
130
+ if value == nil {
131
+ return nil
132
+ }
94
133
return coerceInt (* value )
95
134
case string :
96
135
val , err := strconv .ParseFloat (value , 0 )
@@ -99,6 +138,9 @@ func coerceInt(value interface{}) interface{} {
99
138
}
100
139
return coerceInt (val )
101
140
case * string :
141
+ if value == nil {
142
+ return nil
143
+ }
102
144
return coerceInt (* value )
103
145
}
104
146
@@ -133,54 +175,93 @@ func coerceFloat(value interface{}) interface{} {
133
175
}
134
176
return 0.0
135
177
case * bool :
178
+ if value == nil {
179
+ return nil
180
+ }
136
181
return coerceFloat (* value )
137
182
case int :
138
183
return float64 (value )
139
184
case * int :
185
+ if value == nil {
186
+ return nil
187
+ }
140
188
return coerceFloat (* value )
141
189
case int8 :
142
190
return float64 (value )
143
191
case * int8 :
192
+ if value == nil {
193
+ return nil
194
+ }
144
195
return coerceFloat (* value )
145
196
case int16 :
146
197
return float64 (value )
147
198
case * int16 :
199
+ if value == nil {
200
+ return nil
201
+ }
148
202
return coerceFloat (* value )
149
203
case int32 :
150
204
return float64 (value )
151
205
case * int32 :
206
+ if value == nil {
207
+ return nil
208
+ }
152
209
return coerceFloat (* value )
153
210
case int64 :
154
211
return float64 (value )
155
212
case * int64 :
213
+ if value == nil {
214
+ return nil
215
+ }
156
216
return coerceFloat (* value )
157
217
case uint :
158
218
return float64 (value )
159
219
case * uint :
220
+ if value == nil {
221
+ return nil
222
+ }
160
223
return coerceFloat (* value )
161
224
case uint8 :
162
225
return float64 (value )
163
226
case * uint8 :
227
+ if value == nil {
228
+ return nil
229
+ }
164
230
return coerceFloat (* value )
165
231
case uint16 :
166
232
return float64 (value )
167
233
case * uint16 :
234
+ if value == nil {
235
+ return nil
236
+ }
168
237
return coerceFloat (* value )
169
238
case uint32 :
170
239
return float64 (value )
171
240
case * uint32 :
241
+ if value == nil {
242
+ return nil
243
+ }
172
244
return coerceFloat (* value )
173
245
case uint64 :
174
246
return float64 (value )
175
247
case * uint64 :
248
+ if value == nil {
249
+ return nil
250
+ }
176
251
return coerceFloat (* value )
177
252
case float32 :
178
253
return value
179
254
case * float32 :
255
+ if value == nil {
256
+ return nil
257
+ }
180
258
return coerceFloat (* value )
181
259
case float64 :
182
260
return value
183
261
case * float64 :
262
+ if value == nil {
263
+ return nil
264
+ }
184
265
return coerceFloat (* value )
185
266
case string :
186
267
val , err := strconv .ParseFloat (value , 0 )
@@ -189,6 +270,9 @@ func coerceFloat(value interface{}) interface{} {
189
270
}
190
271
return val
191
272
case * string :
273
+ if value == nil {
274
+ return nil
275
+ }
192
276
return coerceFloat (* value )
193
277
}
194
278
@@ -222,6 +306,9 @@ var Float = NewScalar(ScalarConfig{
222
306
223
307
func coerceString (value interface {}) interface {} {
224
308
if v , ok := value .(* string ); ok {
309
+ if v == nil {
310
+ return nil
311
+ }
225
312
return * v
226
313
}
227
314
return fmt .Sprintf ("%v" , value )
@@ -249,6 +336,9 @@ func coerceBool(value interface{}) interface{} {
249
336
case bool :
250
337
return value
251
338
case * bool :
339
+ if value == nil {
340
+ return nil
341
+ }
252
342
return * value
253
343
case string :
254
344
switch value {
@@ -257,90 +347,129 @@ func coerceBool(value interface{}) interface{} {
257
347
}
258
348
return true
259
349
case * string :
350
+ if value == nil {
351
+ return nil
352
+ }
260
353
return coerceBool (* value )
261
354
case float64 :
262
355
if value != 0 {
263
356
return true
264
357
}
265
358
return false
266
359
case * float64 :
360
+ if value == nil {
361
+ return nil
362
+ }
267
363
return coerceBool (* value )
268
364
case float32 :
269
365
if value != 0 {
270
366
return true
271
367
}
272
368
return false
273
369
case * float32 :
370
+ if value == nil {
371
+ return nil
372
+ }
274
373
return coerceBool (* value )
275
374
case int :
276
375
if value != 0 {
277
376
return true
278
377
}
279
378
return false
280
379
case * int :
380
+ if value == nil {
381
+ return nil
382
+ }
281
383
return coerceBool (* value )
282
384
case int8 :
283
385
if value != 0 {
284
386
return true
285
387
}
286
388
return false
287
389
case * int8 :
390
+ if value == nil {
391
+ return nil
392
+ }
288
393
return coerceBool (* value )
289
394
case int16 :
290
395
if value != 0 {
291
396
return true
292
397
}
293
398
return false
294
399
case * int16 :
400
+ if value == nil {
401
+ return nil
402
+ }
295
403
return coerceBool (* value )
296
404
case int32 :
297
405
if value != 0 {
298
406
return true
299
407
}
300
408
return false
301
409
case * int32 :
410
+ if value == nil {
411
+ return nil
412
+ }
302
413
return coerceBool (* value )
303
414
case int64 :
304
415
if value != 0 {
305
416
return true
306
417
}
307
418
return false
308
419
case * int64 :
420
+ if value == nil {
421
+ return nil
422
+ }
309
423
return coerceBool (* value )
310
424
case uint :
311
425
if value != 0 {
312
426
return true
313
427
}
314
428
return false
315
429
case * uint :
430
+ if value == nil {
431
+ return nil
432
+ }
316
433
return coerceBool (* value )
317
434
case uint8 :
318
435
if value != 0 {
319
436
return true
320
437
}
321
438
return false
322
439
case * uint8 :
440
+ if value == nil {
441
+ return nil
442
+ }
323
443
return coerceBool (* value )
324
444
case uint16 :
325
445
if value != 0 {
326
446
return true
327
447
}
328
448
return false
329
449
case * uint16 :
450
+ if value == nil {
451
+ return nil
452
+ }
330
453
return coerceBool (* value )
331
454
case uint32 :
332
455
if value != 0 {
333
456
return true
334
457
}
335
458
return false
336
459
case * uint32 :
460
+ if value == nil {
461
+ return nil
462
+ }
337
463
return coerceBool (* value )
338
464
case uint64 :
339
465
if value != 0 {
340
466
return true
341
467
}
342
468
return false
343
469
case * uint64 :
470
+ if value == nil {
471
+ return nil
472
+ }
344
473
return coerceBool (* value )
345
474
}
346
475
return false
@@ -392,6 +521,9 @@ func serializeDateTime(value interface{}) interface{} {
392
521
393
522
return string (buff )
394
523
case * time.Time :
524
+ if value == nil {
525
+ return nil
526
+ }
395
527
return serializeDateTime (* value )
396
528
default :
397
529
return nil
@@ -411,6 +543,9 @@ func unserializeDateTime(value interface{}) interface{} {
411
543
case string :
412
544
return unserializeDateTime ([]byte (value ))
413
545
case * string :
546
+ if value == nil {
547
+ return nil
548
+ }
414
549
return unserializeDateTime ([]byte (* value ))
415
550
default :
416
551
return nil
0 commit comments