(reader *bufio.Reader)
| 453 | } |
| 454 | |
| 455 | func readRESPBulkString(reader *bufio.Reader) (string, error) { |
| 456 | line, errLine := readRESPLine(reader) |
| 457 | if errLine != nil { |
| 458 | return "", errLine |
| 459 | } |
| 460 | length, errParse := strconv.Atoi(line) |
| 461 | if errParse != nil { |
| 462 | return "", fmt.Errorf("protocol error") |
| 463 | } |
| 464 | if length < 0 { |
| 465 | return "", nil |
| 466 | } |
| 467 | buf := make([]byte, length+2) |
| 468 | if _, errRead := io.ReadFull(reader, buf); errRead != nil { |
| 469 | return "", errRead |
| 470 | } |
| 471 | if length+2 < 2 || buf[length] != '\r' || buf[length+1] != '\n' { |
| 472 | return "", fmt.Errorf("protocol error") |
| 473 | } |
| 474 | return string(buf[:length]), nil |
| 475 | } |
| 476 | |
| 477 | func readRESPLine(reader *bufio.Reader) (string, error) { |
| 478 | line, errRead := reader.ReadString('\n') |
no test coverage detected