@@ -25,52 +25,78 @@ func coerceInt(value interface{}) interface{} {
25
25
return nil
26
26
}
27
27
return value
28
+ case * int :
29
+ return coerceInt (* value )
28
30
case int8 :
29
31
return int (value )
32
+ case * int8 :
33
+ return int (* value )
30
34
case int16 :
31
35
return int (value )
36
+ case * int16 :
37
+ return int (* value )
32
38
case int32 :
33
39
return int (value )
40
+ case * int32 :
41
+ return int (* value )
34
42
case int64 :
35
43
if value < int64 (math .MinInt32 ) || value > int64 (math .MaxInt32 ) {
36
44
return nil
37
45
}
38
46
return int (value )
47
+ case * int64 :
48
+ return coerceInt (* value )
39
49
case uint :
40
50
if value > math .MaxInt32 {
41
51
return nil
42
52
}
43
53
return int (value )
54
+ case * uint :
55
+ return coerceInt (* value )
44
56
case uint8 :
45
57
return int (value )
58
+ case * uint8 :
59
+ return int (* value )
46
60
case uint16 :
47
61
return int (value )
62
+ case * uint16 :
63
+ return int (* value )
48
64
case uint32 :
49
65
if value > uint32 (math .MaxInt32 ) {
50
66
return nil
51
67
}
52
68
return int (value )
69
+ case * uint32 :
70
+ return coerceInt (* value )
53
71
case uint64 :
54
72
if value > uint64 (math .MaxInt32 ) {
55
73
return nil
56
74
}
57
75
return int (value )
76
+ case * uint64 :
77
+ return coerceInt (* value )
58
78
case float32 :
59
79
if value < float32 (math .MinInt32 ) || value > float32 (math .MaxInt32 ) {
60
80
return nil
61
81
}
62
82
return int (value )
83
+ case * float32 :
84
+ return coerceInt (* value )
63
85
case float64 :
64
86
if value < float64 (math .MinInt32 ) || value > float64 (math .MaxInt32 ) {
65
87
return nil
66
88
}
67
89
return int (value )
90
+ case * float64 :
91
+ return coerceInt (* value )
68
92
case string :
69
93
val , err := strconv .ParseFloat (value , 0 )
70
94
if err != nil {
71
95
return nil
72
96
}
73
97
return coerceInt (val )
98
+ case * string :
99
+ return coerceInt (* value )
74
100
}
75
101
76
102
// If the value cannot be transformed into an int, return nil instead of '0'
@@ -103,18 +129,28 @@ func coerceFloat(value interface{}) interface{} {
103
129
return 1.0
104
130
}
105
131
return 0.0
132
+ case * bool :
133
+ return coerceFloat (* value )
106
134
case int :
107
135
return float64 (value )
136
+ case * int32 :
137
+ return coerceFloat (* value )
108
138
case float32 :
109
139
return value
140
+ case * float32 :
141
+ return coerceFloat (* value )
110
142
case float64 :
111
143
return value
144
+ case * float64 :
145
+ return coerceFloat (* value )
112
146
case string :
113
147
val , err := strconv .ParseFloat (value , 0 )
114
148
if err != nil {
115
149
return nil
116
150
}
117
151
return val
152
+ case * string :
153
+ return coerceFloat (* value )
118
154
}
119
155
return 0.0
120
156
}
@@ -143,6 +179,9 @@ var Float = NewScalar(ScalarConfig{
143
179
})
144
180
145
181
func coerceString (value interface {}) interface {} {
182
+ if v , ok := value .(* string ); ok {
183
+ return * v
184
+ }
146
185
return fmt .Sprintf ("%v" , value )
147
186
}
148
187
@@ -167,27 +206,37 @@ func coerceBool(value interface{}) interface{} {
167
206
switch value := value .(type ) {
168
207
case bool :
169
208
return value
209
+ case * bool :
210
+ return * value
170
211
case string :
171
212
switch value {
172
213
case "" , "false" :
173
214
return false
174
215
}
175
216
return true
217
+ case * string :
218
+ return coerceBool (* value )
176
219
case float64 :
177
220
if value != 0 {
178
221
return true
179
222
}
180
223
return false
224
+ case * float64 :
225
+ return coerceBool (* value )
181
226
case float32 :
182
227
if value != 0 {
183
228
return true
184
229
}
185
230
return false
231
+ case * float32 :
232
+ return coerceBool (* value )
186
233
case int :
187
234
if value != 0 {
188
235
return true
189
236
}
190
237
return false
238
+ case * int :
239
+ return coerceBool (* value )
191
240
}
192
241
return false
193
242
}
0 commit comments