func()

in ubjson/parse.go [353:385]


func (p *Parser) stepString(b []byte) ([]byte, bool, error) {
	var (
		err  error
		done bool
		st   = &p.state.current
	)

	switch st.stateStep {
	case stStart:
		b, err = p.stepLen(b, st.withStep(stWithLen))
		if !(err == nil && st.stateStep == stWithLen) {
			break
		}
		fallthrough
	case stWithLen:
		L := p.length.current
		if L == 0 {
			done = true
			err = p.visitor.OnString("")
		} else {
			var tmp []byte
			if b, tmp = p.collect(b, int(L)); tmp != nil {
				done = true
				err = p.strVisitor.OnStringRef(tmp)
			}
		}
	}

	if done {
		done, err = p.popLenState()
	}
	return b, done, err
}