func()

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
}