diff options
| author | alex <[email protected]> | 2026-07-04 22:41:14 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-04 22:41:14 +0200 |
| commit | 5da6761fa6d7d531c92b818e9cf8ea4a1c603a66 (patch) | |
| tree | 2b5af303121340a8524381577f17cad5a279157d /main.go | |
| parent | 04d91d6e20ce2bdb01703c1ad1ac3073f237e42e (diff) | |
| download | redis-clone-5da6761fa6d7d531c92b818e9cf8ea4a1c603a66.tar.xz redis-clone-5da6761fa6d7d531c92b818e9cf8ea4a1c603a66.zip | |
made * case in parser recursive
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:])) |
