Skip to content

Commit 7416be3

Browse files
Optimized Vec<u8> encoding case
1 parent 4f282fe commit 7416be3

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

primitives/scale_encoder.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"reflect"
88

99
SType "github.com/itering/scale.go/types"
10+
utiles "github.com/itering/scale.go/utiles"
1011
"github.com/itering/scale.go/utiles/uint128"
1112
)
1213

@@ -39,8 +40,8 @@ func (encoderT) array(value reflect.Value, dest *string) bool {
3940

4041
// Dynamic arrays
4142
func (encoderT) slice(value reflect.Value, dest *string) bool {
42-
len := uint32(value.Len())
43-
if len == 0 {
43+
length := uint32(value.Len())
44+
if length == 0 {
4445
Encoder.EncodeTo(CompactU32{Value: 0}, dest)
4546
return true
4647
}
@@ -52,10 +53,15 @@ func (encoderT) slice(value reflect.Value, dest *string) bool {
5253
return false
5354
}
5455

55-
Encoder.EncodeTo(CompactU32{Value: len}, dest)
56-
for i := 0; i < int(len); i++ {
57-
if !Encoder.EncodeTo(value.Index(i).Interface(), dest) {
58-
return false
56+
Encoder.EncodeTo(CompactU32{Value: length}, dest)
57+
if value.Index(0).Kind() == reflect.Uint8 {
58+
var concreteValue []byte = value.Interface().([]byte)
59+
*dest += utiles.BytesToHex(concreteValue)
60+
} else {
61+
for i := 0; i < int(length); i++ {
62+
if !Encoder.EncodeTo(value.Index(i).Interface(), dest) {
63+
return false
64+
}
5965
}
6066
}
6167

0 commit comments

Comments
 (0)