go-json/decode_number.go

41 lines
825 B
Go
Raw Normal View History

2020-08-11 12:04:32 +03:00
package json
import (
"unsafe"
)
type numberDecoder struct {
*floatDecoder
op func(uintptr, Number)
}
func newNumberDecoder(op func(uintptr, Number)) *numberDecoder {
return &numberDecoder{
floatDecoder: newFloatDecoder(nil),
op: op,
}
}
2020-08-11 13:05:20 +03:00
func (d *numberDecoder) setDisallowUnknownFields(_ bool) {}
2020-08-11 12:04:32 +03:00
func (d *numberDecoder) decodeStream(s *stream, p uintptr) error {
bytes, err := d.floatDecoder.decodeStreamByte(s)
if err != nil {
return err
}
str := *(*string)(unsafe.Pointer(&bytes))
d.op(p, Number(str))
return nil
}
func (d *numberDecoder) decode(buf []byte, cursor int64, p uintptr) (int64, error) {
bytes, c, err := d.floatDecoder.decodeByte(buf, cursor)
if err != nil {
return 0, err
}
cursor = c
s := *(*string)(unsafe.Pointer(&bytes))
d.op(p, Number(s))
return cursor, nil
}