func (p *parser) parseString(buf *streambuf.Buffer) (common.NetString, bool, bool) { line, err := buf.UntilCRLF() if err != nil { return empty, true, false } if len(line) == 3 && line[1] == '-' && line[2] == '1' { return nilStr, true, true } length, err := parseInt(line[1:]) if err != nil { logp.Err("Failed to read bulk message: %s", err) return empty, false, false } content, err := buf.CollectWithSuffix(int(length), []byte("\r\n")) if err != nil { if err != streambuf.ErrNoMoreBytes { return common.NetString{}, false, false } return common.NetString{}, true, false } return common.NetString(content), true, true }
func (p *parser) parseString(buf *streambuf.Buffer) (string, bool, bool) { line, err := buf.UntilCRLF() if err != nil { return "", true, false } if len(line) == 3 && line[1] == '-' && line[2] == '1' { return "nil", true, true } length, err := strconv.ParseInt(string(line[1:]), 10, 64) if err != nil { logp.Err("Failed to read bulk message: %s", err) return "", false, false } content, err := buf.CollectWithSuffix(int(length), []byte("\r\n")) if err != nil { if err != streambuf.ErrNoMoreBytes { return "", false, false } return "", true, false } return string(content), true, true }
func parseData(parser *parser, buf *streambuf.Buffer) parseResult { msg := parser.message debug("parse message data (%v)", msg.bytes) data, err := buf.CollectWithSuffix( int(msg.bytes-msg.bytesLost), []byte("\r\n"), ) if err != nil { if err == streambuf.ErrNoMoreBytes { return parser.needMore() } return parser.failing(err) } debug("found message data") if msg.bytesLost > 0 { msg.count_values++ } else { parser.appendMessageData(data) } return parser.yield(buf.BufferConsumed() + int(msg.bytesLost)) }