switch to go vendoring
This commit is contained in:
+128
@@ -0,0 +1,128 @@
|
||||
package decoding
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"reflect"
|
||||
|
||||
"github.com/shamaton/msgpack/v2/def"
|
||||
)
|
||||
|
||||
func (d *decoder) isPositiveFixNum(v byte) bool {
|
||||
return def.PositiveFixIntMin <= v && v <= def.PositiveFixIntMax
|
||||
}
|
||||
|
||||
func (d *decoder) isNegativeFixNum(v byte) bool {
|
||||
return def.NegativeFixintMin <= int8(v) && int8(v) <= def.NegativeFixintMax
|
||||
}
|
||||
|
||||
func (d *decoder) asInt(offset int, k reflect.Kind) (int64, int, error) {
|
||||
|
||||
code, _, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
switch {
|
||||
case d.isPositiveFixNum(code):
|
||||
b, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(b), offset, nil
|
||||
|
||||
case d.isNegativeFixNum(code):
|
||||
b, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(int8(b)), offset, nil
|
||||
|
||||
case code == def.Uint8:
|
||||
offset++
|
||||
b, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(uint8(b)), offset, nil
|
||||
|
||||
case code == def.Int8:
|
||||
offset++
|
||||
b, offset, err := d.readSize1(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(int8(b)), offset, nil
|
||||
|
||||
case code == def.Uint16:
|
||||
offset++
|
||||
bs, offset, err := d.readSize2(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
v := binary.BigEndian.Uint16(bs)
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Int16:
|
||||
offset++
|
||||
bs, offset, err := d.readSize2(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
v := int16(binary.BigEndian.Uint16(bs))
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Uint32:
|
||||
offset++
|
||||
bs, offset, err := d.readSize4(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
v := binary.BigEndian.Uint32(bs)
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Int32:
|
||||
offset++
|
||||
bs, offset, err := d.readSize4(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
v := int32(binary.BigEndian.Uint32(bs))
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Uint64:
|
||||
offset++
|
||||
bs, offset, err := d.readSize8(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(binary.BigEndian.Uint64(bs)), offset, nil
|
||||
|
||||
case code == def.Int64:
|
||||
offset++
|
||||
bs, offset, err := d.readSize8(offset)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(binary.BigEndian.Uint64(bs)), offset, nil
|
||||
|
||||
case code == def.Float32:
|
||||
v, offset, err := d.asFloat32(offset, k)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Float64:
|
||||
v, offset, err := d.asFloat64(offset, k)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return int64(v), offset, nil
|
||||
|
||||
case code == def.Nil:
|
||||
offset++
|
||||
return 0, offset, nil
|
||||
}
|
||||
|
||||
return 0, 0, d.errorTemplate(code, k)
|
||||
}
|
||||
Reference in New Issue
Block a user