in ubjson/parse.go [537:572]
func (p *Parser) stepObjectDyn(b []byte) ([]byte, bool, error) {
var (
err error
st = &p.state.current
step = st.stateStep
)
if step == stStart {
if b[0] == objEndMarker {
err := p.visitor.OnObjectFinished()
done := true
if err == nil {
done, err = p.popState()
}
return b[1:], done, err
}
}
switch step {
case stStart:
b, err = p.stepLen(b, st.withStep(stFieldNameLen))
case stFieldNameLen:
L := p.length.current
var tmp []byte
if b, tmp = p.collect(b, int(L)); tmp != nil {
p.popLen()
err = p.strVisitor.OnKeyRef(tmp)
}
st.stateStep = stCont
case stCont:
st.stateStep = stStart
b, _, err = p.stepValue(b)
}
return b, false, err
}