in ubjson/parse.go [165:200]
func (p *Parser) finalize() error {
for len(p.state.stack) > 0 {
var err error
switch p.state.current.stateType {
case stArrayCount, stArrayTyped:
if p.length.current != 0 || p.state.current.stateStep != stCont {
return errMissingArrEnd
}
err = p.visitor.OnArrayFinished()
case stObjectCount, stObjectTyped:
step := p.state.current.stateStep
l := p.length.current
if l != 0 || step != stFieldName {
return errMissingObjEnd
}
err = p.visitor.OnObjectFinished()
}
if err != nil {
return err
}
_, err = p.popState()
}
st := &p.state.current
incomplete := len(p.state.stack) > 0 ||
st.stateStep != stStart ||
st.stateType != stNext
if incomplete {
return errIncomplete
}
return nil
}