func (p *parser) dispatch(depth int, buf *streambuf.Buffer) (common.NetString, bool, bool, bool) { if buf.Len() == 0 { return empty, false, true, false } var value common.NetString var iserror, ok, complete bool snapshot := buf.Snapshot() switch buf.Bytes()[0] { case '*': value, iserror, ok, complete = p.parseArray(depth, buf) case '$': value, ok, complete = p.parseString(buf) case ':': value, ok, complete = p.parseInt(buf) case '+': value, ok, complete = p.parseSimpleString(buf) case '-': iserror = true value, ok, complete = p.parseSimpleString(buf) default: if isDebug { debugf("Unexpected message starting with %s", buf.Bytes()[0]) } return empty, false, false, false } if !ok || !complete { buf.Restore(snapshot) } return value, iserror, ok, complete }
func parseNextArg(buf *streambuf.Buffer) error { err := buf.IgnoreSymbol(' ') if err == streambuf.ErrUnexpectedEOB || err == streambuf.ErrNoMoreBytes { buf.SetError(nil) return ErrNoMoreArgument } if buf.Len() == 0 { return ErrNoMoreArgument } return nil }