Skip to content

Commit 84e352c

Browse files
committed
fix/slice: support empty slice in hight level api
1 parent 7357d58 commit 84e352c

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed

basic.go

+9-13
Original file line numberDiff line numberDiff line change
@@ -130,28 +130,24 @@ func (e *basicEncoderImpl) encodeBasic(input interface{}, signals []*PrimitivePa
130130

131131
// encodeBasicSlice encode reflect.Value of slice, and inserting signals
132132
func (e *basicEncoderImpl) encodeBasicSlice(value reflect.Value, signals []*PrimitivePacketEncoder) ([]byte, error) {
133-
if value.Len() == 0 {
134-
return nil, fmt.Errorf("no item is slice")
135-
}
136-
137133
var nodeEncoder *NodePacketEncoder
138134

139-
switch value.Index(0).Kind() {
140-
case reflect.String:
135+
switch value.Type() {
136+
case utils.TyeOfStringSlice:
141137
nodeEncoder = e.encodeBasicStringSlice(value)
142-
case reflect.Int32:
138+
case utils.TyeOfInt32Slice:
143139
nodeEncoder = e.encodeBasicInt32Slice(value)
144-
case reflect.Uint32:
140+
case utils.TyeOfUint32Slice:
145141
nodeEncoder = e.encodeBasicUint32Slice(value)
146-
case reflect.Int64:
142+
case utils.TyeOfInt64Slice:
147143
nodeEncoder = e.encodeBasicInt64Slice(value)
148-
case reflect.Uint64:
144+
case utils.TyeOfUint64Slice:
149145
nodeEncoder = e.encodeBasicUint64Slice(value)
150-
case reflect.Float32:
146+
case utils.TyeOfFloat32Slice:
151147
nodeEncoder = e.encodeBasicFloat32Slice(value)
152-
case reflect.Float64:
148+
case utils.TyeOfFloat64Slice:
153149
nodeEncoder = e.encodeBasicFloat64Slice(value)
154-
case reflect.Bool:
150+
case utils.TyeOfBoolSlice:
155151
nodeEncoder = e.encodeBasicBoolSlice(value)
156152
default:
157153
panic(fmt.Errorf("marshal error, no matching type in SliceTestData: %v", value.Index(0).Kind()))

internal/utils/common.go

+24
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,27 @@ const RootToken byte = 0x01
2525

2626
// TypeOfByteSlice Type of []byte
2727
var TypeOfByteSlice = reflect.TypeOf([]byte{})
28+
29+
// TyeOfStringSlice Type of []string{}
30+
var TyeOfStringSlice = reflect.TypeOf([]string{})
31+
32+
// TyeOfInt32Slice Type of []int32{}
33+
var TyeOfInt32Slice = reflect.TypeOf([]int32{})
34+
35+
// TyeOfUint32Slice Type of []uint32{}
36+
var TyeOfUint32Slice = reflect.TypeOf([]uint32{})
37+
38+
// TyeOfInt64Slice Type of []int64{}
39+
var TyeOfInt64Slice = reflect.TypeOf([]int64{})
40+
41+
// TyeOfUint64Slice Type of []uint64{}
42+
var TyeOfUint64Slice = reflect.TypeOf([]uint64{})
43+
44+
// TyeOfFloat32Slice Type of []float32{}
45+
var TyeOfFloat32Slice = reflect.TypeOf([]float32{})
46+
47+
// TyeOfFloat64Slice Type of []float64{}
48+
var TyeOfFloat64Slice = reflect.TypeOf([]float64{})
49+
50+
// TyeOfBoolSlice Type of []bool{}
51+
var TyeOfBoolSlice = reflect.TypeOf([]bool{})

types.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ func ToInt32Slice(v []byte) ([]int32, error) {
3131
if err != nil {
3232
return nil, err
3333
}
34-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
34+
if !packet.IsSlice() {
3535
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
3636
}
37+
3738
result := make([]int32, 0)
3839
for _, p := range packet.PrimitivePackets {
3940
v, _ := p.ToInt32()
@@ -61,7 +62,7 @@ func ToUInt32Slice(v []byte) ([]uint32, error) {
6162
if err != nil {
6263
return nil, err
6364
}
64-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
65+
if !packet.IsSlice() {
6566
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
6667
}
6768
result := make([]uint32, 0)
@@ -91,7 +92,7 @@ func ToInt64Slice(v []byte) ([]int64, error) {
9192
if err != nil {
9293
return nil, err
9394
}
94-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
95+
if !packet.IsSlice() {
9596
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
9697
}
9798
result := make([]int64, 0)
@@ -121,7 +122,7 @@ func ToUInt64Slice(v []byte) ([]uint64, error) {
121122
if err != nil {
122123
return nil, err
123124
}
124-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
125+
if !packet.IsSlice() {
125126
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
126127
}
127128
result := make([]uint64, 0)
@@ -151,7 +152,7 @@ func ToFloat32Slice(v []byte) ([]float32, error) {
151152
if err != nil {
152153
return nil, err
153154
}
154-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
155+
if !packet.IsSlice() {
155156
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
156157
}
157158
result := make([]float32, 0)
@@ -181,7 +182,7 @@ func ToFloat64Slice(v []byte) ([]float64, error) {
181182
if err != nil {
182183
return nil, err
183184
}
184-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
185+
if !packet.IsSlice() {
185186
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
186187
}
187188
result := make([]float64, 0)
@@ -211,7 +212,7 @@ func ToBoolSlice(v []byte) ([]bool, error) {
211212
if err != nil {
212213
return nil, err
213214
}
214-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
215+
if !packet.IsSlice() {
215216
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
216217
}
217218
result := make([]bool, 0)
@@ -241,7 +242,7 @@ func ToUTF8StringSlice(v []byte) ([]string, error) {
241242
if err != nil {
242243
return nil, err
243244
}
244-
if !packet.IsSlice() || len(packet.PrimitivePackets) <= 0 {
245+
if !packet.IsSlice() {
245246
return nil, fmt.Errorf("v not a slice: %v", utils.FormatBytes(v))
246247
}
247248
result := make([]string, 0)

0 commit comments

Comments
 (0)