aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
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