aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-04 22:37:16 +0200
committeralex <[email protected]>2026-07-04 22:37:16 +0200
commit04d91d6e20ce2bdb01703c1ad1ac3073f237e42e (patch)
tree3958feb5c93b7b7fa9d2827d27bafe50c4c395f5
parentced1427b43d68fe0f40cdf3cb304b06eefd6153f (diff)
downloadredis-clone-04d91d6e20ce2bdb01703c1ad1ac3073f237e42e.tar.xz
redis-clone-04d91d6e20ce2bdb01703c1ad1ac3073f237e42e.zip
added bulk string parsing
-rw-r--r--main.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/main.go b/main.go
index 5db75f3..a2ace56 100644
--- a/main.go
+++ b/main.go
@@ -172,7 +172,26 @@ func parseRESP(reader *bufio.Reader) ([]string, error) {
args = append(args, string(buf))
}
return args, nil
+ case '$':
+ strLen, _ := strconv.Atoi(strings.TrimSpace(line[1:]))
+ if strLen == -1 {
+ return []string{""}, nil
+ }
+
+ 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
+ }
+
+ return []string{string(buf)}, nil
case '+':
cleanStr := strings.TrimSpace(line[1:])
return []string{cleanStr}, nil