switch to go vendoring
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
package decoding
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
|
||||
"github.com/shamaton/msgpack/v2/def"
|
||||
)
|
||||
|
||||
func (d *decoder) isCodeBin(v byte) bool {
|
||||
switch v {
|
||||
case def.Bin8, def.Bin16, def.Bin32:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (d *decoder) asBin(offset int, k reflect.Kind) ([]byte, int, error) {
|
||||
code, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return emptyBytes, 0, err
|
||||
}
|
||||
|
||||
switch code {
|
||||
case def.Bin8:
|
||||
l, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return emptyBytes, 0, err
|
||||
}
|
||||
o := offset + int(uint8(l))
|
||||
return d.data[offset:o], o, nil
|
||||
case def.Bin16:
|
||||
bs, offset, err := d.readSize2(offset)
|
||||
o := offset + int(binary.BigEndian.Uint16(bs))
|
||||
if err != nil {
|
||||
return emptyBytes, 0, err
|
||||
}
|
||||
return d.data[offset:o], o, nil
|
||||
case def.Bin32:
|
||||
bs, offset, err := d.readSize4(offset)
|
||||
o := offset + int(binary.BigEndian.Uint32(bs))
|
||||
if err != nil {
|
||||
return emptyBytes, 0, err
|
||||
}
|
||||
return d.data[offset:o], o, nil
|
||||
}
|
||||
|
||||
return emptyBytes, 0, d.errorTemplate(code, k)
|
||||
}
|
||||
|
||||
func (d *decoder) asBinString(offset int, k reflect.Kind) (string, int, error) {
|
||||
bs, offset, err := d.asBin(offset, k)
|
||||
return *(*string)(unsafe.Pointer(&bs)), offset, err
|
||||
}
|
||||
Reference in New Issue
Block a user