diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 29 |
1 files changed, 7 insertions, 22 deletions
@@ -149,28 +149,13 @@ func parseRESP(reader *bufio.Reader) ([]string, error) { argC, _ := strconv.Atoi(strings.TrimSpace(line[1:])) for i := 0; i < argC; i++ { - lengthLine, err := reader.ReadString('\n') - - if err != nil { - return nil, err - } - - strLen, _ := strconv.Atoi(strings.TrimSpace(lengthLine[1:])) - - buf := make([]byte, strLen) - - _, err = io.ReadFull(reader, buf) - if err != nil { - return nil, err - } - - _, err = reader.Discard(2) - if err != nil { - return nil, err - } - - args = append(args, string(buf)) - } + nestedArgs, err := parseRESP(reader) + if err != nil { + return nil, err + } + + args = append(args, nestedArgs...) + } return args, nil case '$': strLen, _ := strconv.Atoi(strings.TrimSpace(line[1:])) |
