@@ -9,9 +9,15 @@ import (
9
9
"unsafe"
10
10
)
11
11
12
+ // Errors
12
13
var (
13
14
KeyPathNotFoundError = errors .New ("Key path not found" )
14
15
UnknownValueTypeError = errors .New ("Unknown value type" )
16
+ MalformedJsonError = errors .New ("Malformed JSON error" )
17
+ MalformedStringError = errors .New ("Value is string, but can't find closing '\" ' symbol" )
18
+ MalformedArrayError = errors .New ("Value is array, but can't find closing ']' symbol" )
19
+ MalformedObjectError = errors .New ("Value looks like object, but can't find closing '}' symbol" )
20
+ MalformedValueError = errors .New ("Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol" )
15
21
)
16
22
17
23
func tokenEnd (data []byte ) int {
@@ -199,7 +205,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset
199
205
nO := nextToken (data [offset :], false )
200
206
201
207
if nO == - 1 {
202
- return []byte {}, NotExist , - 1 , errors . New ( "Malformed JSON error" )
208
+ return []byte {}, NotExist , - 1 , MalformedJsonError
203
209
}
204
210
205
211
offset += nO
@@ -211,15 +217,15 @@ func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset
211
217
if idx := stringEnd (data [offset + 1 :]); idx != - 1 {
212
218
endOffset += idx + 1
213
219
} else {
214
- return []byte {}, dataType , offset , errors . New ( "Value is string, but can't find closing ' \" ' symbol" )
220
+ return []byte {}, dataType , offset , MalformedStringError
215
221
}
216
222
} else if data [offset ] == '[' { // if array value
217
223
dataType = Array
218
224
// break label, for stopping nested loops
219
225
endOffset = blockEnd (data [offset :], '[' , ']' )
220
226
221
227
if endOffset == - 1 {
222
- return []byte {}, dataType , offset , errors . New ( "Value is array, but can't find closing ']' symbol" )
228
+ return []byte {}, dataType , offset , MalformedArrayError
223
229
}
224
230
225
231
endOffset += offset
@@ -229,7 +235,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset
229
235
endOffset = blockEnd (data [offset :], '{' , '}' )
230
236
231
237
if endOffset == - 1 {
232
- return []byte {}, dataType , offset , errors . New ( "Value looks like object, but can't find closing '}' symbol" )
238
+ return []byte {}, dataType , offset , MalformedObjectError
233
239
}
234
240
235
241
endOffset += offset
@@ -238,7 +244,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset
238
244
end := tokenEnd (data [endOffset :])
239
245
240
246
if end == - 1 {
241
- return nil , dataType , offset , errors . New ( "Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol" )
247
+ return nil , dataType , offset , MalformedValueError
242
248
}
243
249
244
250
value := data [offset : endOffset + end ]
@@ -282,7 +288,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset
282
288
// ArrayEach is used when iterating arrays, accepts a callback function with the same return arguments as `Get`.
283
289
func ArrayEach (data []byte , cb func (value []byte , dataType ValueType , offset int , err error ), keys ... string ) (err error ) {
284
290
if len (data ) == 0 {
285
- return errors . New ( "Object is empty" )
291
+ return MalformedObjectError
286
292
}
287
293
288
294
offset := 1
@@ -296,13 +302,13 @@ func ArrayEach(data []byte, cb func(value []byte, dataType ValueType, offset int
296
302
nO := nextToken (data [offset :], false )
297
303
298
304
if nO == - 1 {
299
- return errors . New ( "Malformed JSON" )
305
+ return MalformedJsonError
300
306
}
301
307
302
308
offset += nO
303
309
304
310
if data [offset ] != '[' {
305
- return errors . New ( "Value is not array" )
311
+ return MalformedArrayError
306
312
}
307
313
308
314
offset ++
0 commit comments