Skip to content

Commit dabcf45

Browse files
committed
Merge pull request #33 from pendo-io/dab-typed-datatype
Using new ValueType instead of int for dataType
2 parents c76e4b8 + fd548e5 commit dabcf45

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

parser.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,10 @@ func searchKeys(data []byte, keys ...string) int {
150150
}
151151

152152
// Data types available in valid JSON data.
153+
type ValueType int
154+
153155
const (
154-
NotExist = iota
156+
NotExist = ValueType(iota)
155157
String
156158
Number
157159
Object
@@ -179,7 +181,7 @@ Returns:
179181
Accept multiple keys to specify path to JSON value (in case of quering nested structures).
180182
If no keys provided it will try to extract closest JSON value (simple ones or object/array), useful for reading streams or arrays, see `ArrayEach` implementation.
181183
*/
182-
func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, err error) {
184+
func Get(data []byte, keys ...string) (value []byte, dataType ValueType, offset int, err error) {
183185
if len(keys) > 0 {
184186
if offset = searchKeys(data, keys...); offset == -1 {
185187
return []byte{}, NotExist, -1, errors.New("Key path not found")
@@ -271,7 +273,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, e
271273
}
272274

273275
// ArrayEach is used when iterating arrays, accepts a callback function with the same return arguments as `Get`.
274-
func ArrayEach(data []byte, cb func(value []byte, dataType int, offset int, err error), keys ...string) (err error) {
276+
func ArrayEach(data []byte, cb func(value []byte, dataType ValueType, offset int, err error), keys ...string) (err error) {
275277
if len(data) == 0 {
276278
return errors.New("Object is empty")
277279
}

parser_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import (
1111
var activeTest = ""
1212

1313
func toArray(data []byte) (result [][]byte) {
14-
ArrayEach(data, func(value []byte, dataType int, offset int, err error) {
14+
ArrayEach(data, func(value []byte, dataType ValueType, offset int, err error) {
1515
result = append(result, value)
1616
})
1717

1818
return
1919
}
2020

2121
func toStringArray(data []byte) (result []string) {
22-
ArrayEach(data, func(value []byte, dataType int, offset int, err error) {
22+
ArrayEach(data, func(value []byte, dataType ValueType, offset int, err error) {
2323
result = append(result, string(value))
2424
})
2525

@@ -403,7 +403,7 @@ var getArrayTests = []Test{
403403

404404
// checkFoundAndNoError checks the dataType and error return from Get*() against the test case expectations.
405405
// Returns true the test should proceed to checking the actual data returned from Get*(), or false if the test is finished.
406-
func checkFoundAndNoError(t *testing.T, testKind string, test Test, jtype int, value interface{}, err error) bool {
406+
func checkFoundAndNoError(t *testing.T, testKind string, test Test, jtype ValueType, value interface{}, err error) bool {
407407
isFound := (jtype != NotExist)
408408
isErr := (err != nil)
409409

@@ -427,7 +427,7 @@ func checkFoundAndNoError(t *testing.T, testKind string, test Test, jtype int, v
427427
}
428428
}
429429

430-
func runTests(t *testing.T, tests []Test, runner func(Test) (interface{}, int, error), typeChecker func(Test, interface{}) (bool, interface{})) {
430+
func runTests(t *testing.T, tests []Test, runner func(Test) (interface{}, ValueType, error), typeChecker func(Test, interface{}) (bool, interface{})) {
431431
for _, test := range tests {
432432
if activeTest != "" && test.desc != activeTest {
433433
continue
@@ -458,7 +458,7 @@ func runTests(t *testing.T, tests []Test, runner func(Test) (interface{}, int, e
458458

459459
func TestGet(t *testing.T) {
460460
runTests(t, getTests,
461-
func(test Test) (value interface{}, dataType int, err error) {
461+
func(test Test) (value interface{}, dataType ValueType, err error) {
462462
value, dataType, _, err = Get([]byte(test.json), test.path...)
463463
return
464464
},
@@ -471,7 +471,7 @@ func TestGet(t *testing.T) {
471471

472472
func TestGetString(t *testing.T) {
473473
runTests(t, getStringTests,
474-
func(test Test) (value interface{}, dataType int, err error) {
474+
func(test Test) (value interface{}, dataType ValueType, err error) {
475475
value, err = GetString([]byte(test.json), test.path...)
476476
return value, String, err
477477
},
@@ -484,7 +484,7 @@ func TestGetString(t *testing.T) {
484484

485485
func TestGetInt(t *testing.T) {
486486
runTests(t, getIntTests,
487-
func(test Test) (value interface{}, dataType int, err error) {
487+
func(test Test) (value interface{}, dataType ValueType, err error) {
488488
value, err = GetInt([]byte(test.json), test.path...)
489489
return value, Number, err
490490
},
@@ -497,7 +497,7 @@ func TestGetInt(t *testing.T) {
497497

498498
func TestGetFloat(t *testing.T) {
499499
runTests(t, getFloatTests,
500-
func(test Test) (value interface{}, dataType int, err error) {
500+
func(test Test) (value interface{}, dataType ValueType, err error) {
501501
value, err = GetFloat([]byte(test.json), test.path...)
502502
return value, Number, err
503503
},
@@ -510,7 +510,7 @@ func TestGetFloat(t *testing.T) {
510510

511511
func TestGetBoolean(t *testing.T) {
512512
runTests(t, getBoolTests,
513-
func(test Test) (value interface{}, dataType int, err error) {
513+
func(test Test) (value interface{}, dataType ValueType, err error) {
514514
value, err = GetBoolean([]byte(test.json), test.path...)
515515
return value, Boolean, err
516516
},
@@ -523,7 +523,7 @@ func TestGetBoolean(t *testing.T) {
523523

524524
func TestGetSlice(t *testing.T) {
525525
runTests(t, getArrayTests,
526-
func(test Test) (value interface{}, dataType int, err error) {
526+
func(test Test) (value interface{}, dataType ValueType, err error) {
527527
value, dataType, _, err = Get([]byte(test.json), test.path...)
528528
return
529529
},

0 commit comments

Comments
 (0)