Bumps [github.com/shamaton/msgpack/v2](https://github.com/shamaton/msgpack) from 2.2.0 to 2.2.2. - [Release notes](https://github.com/shamaton/msgpack/releases) - [Commits](https://github.com/shamaton/msgpack/compare/v2.2.0...v2.2.2) --- updated-dependencies: - dependency-name: github.com/shamaton/msgpack/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
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
|
|
}
|
|
v, offset, err := d.readSizeN(offset, int(uint8(l)))
|
|
if err != nil {
|
|
return emptyBytes, 0, err
|
|
}
|
|
return v, offset, nil
|
|
case def.Bin16:
|
|
bs, offset, err := d.readSize2(offset)
|
|
if err != nil {
|
|
return emptyBytes, 0, err
|
|
}
|
|
v, offset, err := d.readSizeN(offset, int(binary.BigEndian.Uint16(bs)))
|
|
if err != nil {
|
|
return emptyBytes, 0, err
|
|
}
|
|
return v, offset, nil
|
|
case def.Bin32:
|
|
bs, offset, err := d.readSize4(offset)
|
|
if err != nil {
|
|
return emptyBytes, 0, err
|
|
}
|
|
v, offset, err := d.readSizeN(offset, int(binary.BigEndian.Uint32(bs)))
|
|
if err != nil {
|
|
return emptyBytes, 0, err
|
|
}
|
|
return v, offset, 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
|
|
}
|