func()

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
}