aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-06 23:01:52 +0200
committeralex <[email protected]>2026-07-06 23:01:52 +0200
commit46ed94f273930ec2842ca4e5c37624c1da584fc4 (patch)
treee929201b5672832eb0b986e5addf790734999d84 /handlers.go
parent6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f (diff)
downloadredis-clone-46ed94f273930ec2842ca4e5c37624c1da584fc4.tar.xz
redis-clone-46ed94f273930ec2842ca4e5c37624c1da584fc4.zip
added TYPE command
Diffstat (limited to 'handlers.go')
-rw-r--r--handlers.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go
index aacabe5..5bf16a8 100644
--- a/handlers.go
+++ b/handlers.go
@@ -543,4 +543,32 @@ func handleHvalues(conn net.Conn, args []string){
result = append(result, value)
}
conn.Write(serializeRESP(result))
+}
+
+func handleType(conn net.Conn, args []string){
+ if len(args) != 2 {
+ conn.Write(serializeRESP(errors.New("ERR wrong number of arguments for 'TYPE'")))
+ return
+ }
+ key := args[1]
+
+ db.mu.Lock()
+ defer db.mu.Unlock()
+
+ item, exists := db.data[key]
+ if !exists {
+ conn.Write(serializeRESP(SimpleString("none")))
+ return
+ }
+
+ switch item.Value.(type) {
+ case string:
+ conn.Write(serializeRESP(SimpleString("string")))
+ case []string:
+ conn.Write(serializeRESP(SimpleString("list")))
+ case map[string]string:
+ conn.Write(serializeRESP(SimpleString("hash")))
+ default:
+ conn.Write(serializeRESP(SimpleString("unknown")))
+ }
} \ No newline at end of file