diff options
| author | alex <[email protected]> | 2026-07-06 23:01:52 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-06 23:01:52 +0200 |
| commit | 46ed94f273930ec2842ca4e5c37624c1da584fc4 (patch) | |
| tree | e929201b5672832eb0b986e5addf790734999d84 | |
| parent | 6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f (diff) | |
| download | redis-clone-46ed94f273930ec2842ca4e5c37624c1da584fc4.tar.xz redis-clone-46ed94f273930ec2842ca4e5c37624c1da584fc4.zip | |
added TYPE command
| -rw-r--r-- | handlers.go | 28 | ||||
| -rw-r--r-- | main.go | 1 |
2 files changed, 29 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 @@ -34,6 +34,7 @@ var commandRegistry = map[string]handlerFunc{ "HGETALL": handleHgetall, "HKEYS": handleHkeys, "HVALUES": handleHvalues, + "TYPE": handleType, } func main() { |
