aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-06 13:55:11 +0200
committeralex <[email protected]>2026-07-06 13:55:11 +0200
commit6745833aba4799104f299704af261696ce82b291 (patch)
tree9f9d9995c826602211446e181b397461d18593e8 /handlers.go
parentf00398f4be24b5c3cce52c36dc71a42d1d0ccfbe (diff)
downloadredis-clone-6745833aba4799104f299704af261696ce82b291.tar.xz
redis-clone-6745833aba4799104f299704af261696ce82b291.zip
refactored all handlers to take all args as a parameter
Diffstat (limited to 'handlers.go')
-rw-r--r--handlers.go111
1 files changed, 100 insertions, 11 deletions
diff --git a/handlers.go b/handlers.go
index 4625f6a..885e348 100644
--- a/handlers.go
+++ b/handlers.go
@@ -6,10 +6,18 @@ import (
"strconv"
)
-func handleGet(conn net.Conn, key string) {
+func handleGet(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'GET'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
value, exists := db.data[key]
if !exists {
conn.Write(serializeRESP(nil))
@@ -26,10 +34,18 @@ func handleGet(conn net.Conn, key string) {
conn.Write(serializeRESP(strValue))
}
-func handleExists(conn net.Conn, key string) {
+func handleExists(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'EXISTS'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
_, exists := db.data[key]
if exists {
conn.Write(serializeRESP(1))
@@ -38,18 +54,35 @@ func handleExists(conn net.Conn, key string) {
}
}
-func handleSet(conn net.Conn, key, value string) {
+func handleSet(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 3 {
+ err := errors.New("wrong number of arguments for 'SET'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+ value := args[2]
+
db.data[key] = value
conn.Write(serializeRESP(SimpleString("OK")))
}
-func handleDel(conn net.Conn, key string) {
+func handleDel(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'DEL'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
_, exists := db.data[key]
if exists {
delete(db.data, key)
@@ -59,10 +92,18 @@ func handleDel(conn net.Conn, key string) {
}
}
-func handleIncr(conn net.Conn, key string) {
+func handleIncr(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'INCR'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
value, exists := db.data[key]
if exists {
strValue, ok := value.(string)
@@ -88,10 +129,18 @@ func handleIncr(conn net.Conn, key string) {
}
}
-func handleDecr(conn net.Conn, key string) {
+func handleDecr(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'DECR'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
value, exists := db.data[key]
if exists {
strValue, ok := value.(string)
@@ -117,14 +166,25 @@ func handleDecr(conn net.Conn, key string) {
}
}
-func handlePing(conn net.Conn) {
+func handlePing(conn net.Conn, args []string) {
+ if len(args) != 1 {
+ err := errors.New("wrong number of arguments for 'PING'")
+ conn.Write(serializeRESP(err))
+ return
+ }
conn.Write(serializeRESP(SimpleString("PONG")))
}
-func handleFlushall(conn net.Conn) {
+func handleFlushall(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 1 {
+ err := errors.New("wrong number of arguments for 'FLUSHALL'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
db.data = make(map[string]any)
conn.Write(serializeRESP(SimpleString("OK")))
}
@@ -155,10 +215,25 @@ func handleRpush(conn net.Conn, args []string) {
conn.Write(serializeRESP(len(list)))
}
-func handleLrange(conn net.Conn, key string, start, stop int) {
+func handleLrange(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 4 {
+ err := errors.New("wrong number of arguments for 'LRANGE'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+ start, err1 := strconv.Atoi(args[2])
+ stop, err2 := strconv.Atoi(args[3])
+ if err1 != nil || err2 != nil {
+ err := errors.New("value is not an integer or out of range")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
+
value, exists := db.data[key]
if !exists {
conn.Write(serializeRESP([]string{}))
@@ -202,10 +277,17 @@ func handleLrange(conn net.Conn, key string, start, stop int) {
conn.Write(serializeRESP(resultList))
}
-func handleLpop(conn net.Conn, key string){
+func handleLpop(conn net.Conn, args []string){
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'LPOP'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
value, exists := db.data[key]
if !exists {
conn.Write(serializeRESP(nil))
@@ -235,10 +317,17 @@ func handleLpop(conn net.Conn, key string){
}
-func handleRpop(conn net.Conn, key string){
+func handleRpop(conn net.Conn, args []string){
db.mu.Lock()
defer db.mu.Unlock()
+ if len(args) != 2 {
+ err := errors.New("wrong number of arguments for 'RPOOP'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ key := args[1]
value, exists := db.data[key]
if !exists {
conn.Write(serializeRESP(nil))