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
}