Skip to content

Commit 2858437

Browse files
committed
[*] refactor: Reduce complexity a little bit
1 parent ff80771 commit 2858437

File tree

5 files changed

+83
-114
lines changed

5 files changed

+83
-114
lines changed

conv.go

+11-54
Original file line numberDiff line numberDiff line change
@@ -134,62 +134,19 @@ func escapeStringToBuff(s string, buf buffer.Buffer, opt *Opt) {
134134
}
135135

136136
func anyToInt(v any) (u int, err error) {
137-
switch v := v.(type) {
138-
case int:
139-
u = v
140-
case uint:
141-
u = int(v)
142-
case int64:
143-
u = int(v)
144-
case uint64:
145-
u = int(v)
146-
case int32:
147-
u = int(v)
148-
case uint32:
149-
u = int(v)
150-
case int16:
151-
u = int(v)
152-
case uint16:
153-
u = int(v)
154-
case int8:
155-
u = int(v)
156-
case uint8:
157-
u = int(v)
137+
if v == nil {
138+
return 0, fmt.Errorf("%w: parameter is nil", ErrParameterError)
139+
}
140+
value := reflect.ValueOf(v)
141+
switch value.Kind() {
142+
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
143+
return int(value.Int()), nil
144+
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
145+
return int(value.Uint()), nil
158146
default:
159-
err = fmt.Errorf("%s is not a number", reflect.TypeOf(v).String())
147+
return 0, fmt.Errorf("%v is not a number", reflect.TypeOf(v))
160148
}
161-
162-
return
163-
}
164-
165-
// func anyToInt64(v any) (i int64, err error) {
166-
// switch v.(type) {
167-
// case int:
168-
// i = int64(v.(int))
169-
// case uint:
170-
// i = int64(v.(uint))
171-
// case int64:
172-
// i = int64(v.(int64))
173-
// case uint64:
174-
// i = int64(v.(uint64))
175-
// case int32:
176-
// i = int64(v.(int32))
177-
// case uint32:
178-
// i = int64(v.(uint32))
179-
// case int16:
180-
// i = int64(v.(int16))
181-
// case uint16:
182-
// i = int64(v.(uint16))
183-
// case int8:
184-
// i = int64(v.(int8))
185-
// case uint8:
186-
// i = int64(v.(uint8))
187-
// default:
188-
// err = fmt.Errorf("%s is not a number", reflect.TypeOf(v).String())
189-
// }
190-
191-
// return
192-
// }
149+
}
193150

194151
func anyToString(v any) (s string, err error) {
195152
if v == nil {

get.go

+31-24
Original file line numberDiff line numberDiff line change
@@ -96,33 +96,40 @@ func getFromObjectChildren(v *V, caseless bool, key string) (child *V, exist boo
9696
}
9797

9898
func getInCurrentValue(v *V, caseless bool, param any) (*V, error) {
99-
if v.valueType == Array {
100-
// integer expected
101-
pos, err := anyToInt(param)
102-
if err != nil {
103-
return &V{}, err
104-
}
105-
child, ok := childAtIndex(v, pos)
106-
if !ok {
107-
return &V{}, ErrOutOfRange
108-
}
109-
return child, nil
99+
switch v.valueType {
100+
case Array:
101+
return getInCurrentArray(v, param)
102+
case Object:
103+
return getInCurrentObject(v, caseless, param)
104+
default:
105+
return &V{}, fmt.Errorf("%v type does not supports Get()", v.valueType)
106+
}
107+
}
110108

111-
} else if v.valueType == Object {
112-
// string expected
113-
key, err := anyToString(param)
114-
if err != nil {
115-
return &V{}, err
116-
}
117-
child, exist := getFromObjectChildren(v, caseless, key)
118-
if !exist {
119-
return &V{}, ErrNotFound
120-
}
121-
return child, nil
109+
func getInCurrentArray(v *V, param any) (*V, error) {
110+
// integer expected
111+
pos, err := anyToInt(param)
112+
if err != nil {
113+
return &V{}, err
114+
}
115+
child, ok := childAtIndex(v, pos)
116+
if !ok {
117+
return &V{}, ErrOutOfRange
118+
}
119+
return child, nil
120+
}
122121

123-
} else {
124-
return &V{}, fmt.Errorf("%v type does not supports Get()", v.valueType)
122+
func getInCurrentObject(v *V, caseless bool, param any) (*V, error) {
123+
// string expected
124+
key, err := anyToString(param)
125+
if err != nil {
126+
return &V{}, err
127+
}
128+
child, exist := getFromObjectChildren(v, caseless, key)
129+
if !exist {
130+
return &V{}, ErrNotFound
125131
}
132+
return child, nil
126133
}
127134

128135
// GetBytes is similar with v, err := Get(...); v.Bytes(). But if error occurs or Base64 decode error, returns error.

insert_append_delete.go

+31-26
Original file line numberDiff line numberDiff line change
@@ -587,36 +587,41 @@ func (v *V) delete(caseless bool, firstParam any, otherParams ...any) error {
587587
}
588588

589589
func deleteInCurrentValue(v *V, caseless bool, param any) error {
590-
if v.valueType == Object {
591-
// string expected
592-
key, err := anyToString(param)
593-
if err != nil {
594-
return err
595-
}
596-
597-
if exist := delFromObjectChildren(v, caseless, key); !exist {
598-
return ErrNotFound
599-
}
600-
return nil
590+
switch v.valueType {
591+
case Object:
592+
return deleteInCurrentObject(v, caseless, param)
593+
case Array:
594+
return deleteInCurrentArray(v, param)
595+
default:
596+
// else, this is an object value
597+
return fmt.Errorf("%v type does not supports Delete()", v.valueType)
601598
}
599+
}
602600

603-
if v.valueType == Array {
604-
// integer expected
605-
pos, err := anyToInt(param)
606-
if err != nil {
607-
return err
608-
}
609-
610-
pos = posAtIndexForRead(v, pos)
611-
if pos < 0 {
612-
return ErrOutOfRange
613-
}
614-
deleteInArr(v, pos)
615-
return nil
601+
func deleteInCurrentObject(v *V, caseless bool, param any) error {
602+
// string expected
603+
key, err := anyToString(param)
604+
if err != nil {
605+
return err
616606
}
607+
if exist := delFromObjectChildren(v, caseless, key); !exist {
608+
return ErrNotFound
609+
}
610+
return nil
611+
}
617612

618-
// else, this is an object value
619-
return fmt.Errorf("%v type does not supports Delete()", v.valueType)
613+
func deleteInCurrentArray(v *V, param any) error {
614+
// integer expected
615+
pos, err := anyToInt(param)
616+
if err != nil {
617+
return err
618+
}
619+
pos = posAtIndexForRead(v, pos)
620+
if pos < 0 {
621+
return ErrOutOfRange
622+
}
623+
deleteInArr(v, pos)
624+
return nil
620625
}
621626

622627
func deleteInArr(v *V, pos int) {

marshal_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -464,12 +464,12 @@ func testMarshalIndent(t *testing.T) {
464464
bJS, _ := json.MarshalIndent(m, "", " ")
465465

466466
so(string(b), eq, string(bJS))
467-
t.Logf(string(b))
467+
t.Log(string(b))
468468

469469
b = v.MustMarshal(OptIndent("+", " "))
470470
bJS, _ = json.MarshalIndent(m, "+", " ")
471471
so(string(b), eq, string(bJS))
472-
t.Logf(string(b))
472+
t.Log(string(b))
473473
})
474474

475475
cv("array", func() {
@@ -485,12 +485,12 @@ func testMarshalIndent(t *testing.T) {
485485
bJS, _ := json.MarshalIndent(m, "", " ")
486486

487487
so(string(b), eq, string(bJS))
488-
t.Logf(string(b))
488+
t.Log(string(b))
489489

490490
b = v.MustMarshal(OptIndent("+", " "))
491491
bJS, _ = json.MarshalIndent(m, "+", " ")
492492
so(string(b), eq, string(bJS))
493-
t.Logf(string(b))
493+
t.Log(string(b))
494494
})
495495

496496
cv("multiple indents", func() {
@@ -525,7 +525,7 @@ func testMarshalIndent(t *testing.T) {
525525
bJS, _ := json.MarshalIndent(data, "", " ")
526526

527527
so(string(b), eq, string(bJS))
528-
t.Logf(string(b))
528+
t.Log(string(b))
529529
})
530530

531531
cv("empty indent", func() {
@@ -538,7 +538,7 @@ func testMarshalIndent(t *testing.T) {
538538
bJS, _ := json.MarshalIndent(m, "", "")
539539

540540
so(string(b), eq, string(bJS))
541-
t.Logf(string(b))
541+
t.Log(string(b))
542542
})
543543
}
544544

unmarshal_iter_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ func testIterAssignWideRune(t *testing.T) {
5353

5454
func testIterChrSearching(t *testing.T) {
5555
raw := []byte(" { [ { } ] } ")
56-
t.Logf("")
57-
t.Logf(string(raw))
56+
t.Log("")
57+
t.Log(string(raw))
5858
t.Logf("01234567890123456789")
5959

6060
it := iter(raw)
@@ -93,7 +93,7 @@ func testIterParseNumber(t *testing.T) {
9393
v, end, reachEnd, err := it.parseNumber(globalPool{}, 0)
9494
t.Logf("i64 = %v, u64 = %v, f64 = %v", v.num.i64, v.num.u64, v.num.f64)
9595
t.Logf("end = %d, reachEnd = %v", end, reachEnd)
96-
t.Logf(string(b[:end]))
96+
t.Log(string(b[:end]))
9797
so(err, isNil)
9898
so(v.num.f64, eq, -12345.6789)
9999
so(reachEnd, isTrue)
@@ -108,7 +108,7 @@ func testIterParseNumber(t *testing.T) {
108108
so(reachEnd, isFalse)
109109
t.Logf("i64 = %v, u64 = %v, f64 = %v", v.num.i64, v.num.u64, v.num.f64)
110110
t.Logf("end = %d, reachEnd = %v", end, reachEnd)
111-
t.Logf(string(b[:end]))
111+
t.Log(string(b[:end]))
112112
})
113113
}
114114

0 commit comments

Comments
 (0)