aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'handlers.go')
-rw-r--r--handlers.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go
index 5bf16a8..3b7fb76 100644
--- a/handlers.go
+++ b/handlers.go
@@ -200,6 +200,12 @@ func handleRpush(conn net.Conn, args []string) {
key := args[1]
newItems := args[2:]
+ if len(args) < 3 {
+ err := errors.New("wrong number of arguments for 'RPUSH'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
db.mu.Lock()
defer db.mu.Unlock()
@@ -222,6 +228,38 @@ func handleRpush(conn net.Conn, args []string) {
conn.Write(serializeRESP(len(list)))
}
+func handleLpush(conn net.Conn, args []string) {
+ key := args[1]
+ newItems := args[2:]
+
+ if len(args) < 3 {
+ err := errors.New("wrong number of arguments for 'LPUSH'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ db.mu.Lock()
+ defer db.mu.Unlock()
+
+ var list []string
+ existingItem, exists := db.data[key]
+
+ if exists {
+ var ok bool
+ list, ok = existingItem.Value.([]string)
+ if !ok {
+ err := errors.New("WRONGTYPE Operation against a key holding the wrong kind of value")
+ conn.Write(serializeRESP(err))
+ return
+ }
+ } else {
+ list = []string{}
+ }
+ list = append(newItems, list...)
+ db.data[key] = Item{Value: list}
+ conn.Write(serializeRESP(len(list)))
+}
+
func handleLrange(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()