in ubjson/parse.go [292:351]
func (p *Parser) stepFixedValue(b []byte) ([]byte, bool, error) {
var (
tmp []byte
err error
done bool
)
switch p.state.current.stateStep {
case stNil:
done, err = true, p.visitor.OnNil()
case stNoop:
case stTrue:
done, err = true, p.visitor.OnBool(true)
case stFalse:
done, err = true, p.visitor.OnBool(false)
case stInt8:
b, done, err = b[1:], true, p.visitor.OnInt8(int8(b[0]))
case stUInt8:
b, done, err = b[1:], true, p.visitor.OnUint8(b[0])
case stChar:
b, tmp = p.collect(b, 1)
if done = tmp != nil; done {
err = p.visitor.OnByte(tmp[0])
}
case stInt16:
b, tmp = p.collect(b, 2)
if done = tmp != nil; done {
err = p.visitor.OnInt16(readInt16(tmp))
}
case stInt32:
b, tmp = p.collect(b, 4)
if done = tmp != nil; done {
err = p.visitor.OnInt32(readInt32(tmp))
}
case stInt64:
b, tmp = p.collect(b, 8)
if done = tmp != nil; done {
err = p.visitor.OnInt64(readInt64(tmp))
}
case stFloat32:
b, tmp = p.collect(b, 4)
if done = tmp != nil; done {
err = p.visitor.OnFloat32(readFloat32(tmp))
}
case stFloat64:
b, tmp = p.collect(b, 8)
if done = tmp != nil; done {
err = p.visitor.OnFloat64(readFloat64(tmp))
}
default:
return b, false, err
}
if done && err == nil {
done, err = p.popState()
}
return b, done, err
}