diff options
| author | alex <[email protected]> | 2026-07-06 13:55:11 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-06 13:55:11 +0200 |
| commit | 6745833aba4799104f299704af261696ce82b291 (patch) | |
| tree | 9f9d9995c826602211446e181b397461d18593e8 /handlers.go | |
| parent | f00398f4be24b5c3cce52c36dc71a42d1d0ccfbe (diff) | |
| download | redis-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.go | 111 |
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)) |
