aboutsummaryrefslogtreecommitdiff
path: root/pkg/core/redisDB.go
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-10 20:28:47 +0200
committeralex <[email protected]>2026-07-10 20:28:47 +0200
commitf18210c30e67de4bede7c6080d85629f7086676c (patch)
treec9aedf21ed9f905424f8ab6fdb633254e127fbc6 /pkg/core/redisDB.go
parent36d70e64340033f1e5b928524436c0b2f44c831e (diff)
downloadredis-clone-f18210c30e67de4bede7c6080d85629f7086676c.tar.xz
redis-clone-f18210c30e67de4bede7c6080d85629f7086676c.zip
separated commands into their own files TODO: refactor all commands to work like this
Diffstat (limited to 'pkg/core/redisDB.go')
-rw-r--r--pkg/core/redisDB.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/pkg/core/redisDB.go b/pkg/core/redisDB.go
new file mode 100644
index 0000000..cbd737c
--- /dev/null
+++ b/pkg/core/redisDB.go
@@ -0,0 +1,61 @@
+package core
+
+import (
+ "fmt"
+ "time"
+)
+
+
+type Item struct {
+ Value any
+ ExpiresAt *time.Time
+}
+
+type RedisDB struct {
+ Shards []*Shard
+}
+
+type SimpleString string
+
+func SerializeRESP(v any) []byte {
+ switch val := v.(type) {
+ case string:
+ bulkString := fmt.Sprintf("$%d\r\n%s\r\n", len(val), val)
+ return []byte(bulkString)
+ case int:
+ integerString := fmt.Sprintf(":%d\r\n",val)
+ return []byte(integerString)
+ case nil:
+ return []byte("$-1\r\n")
+ case error:
+ errorString := fmt.Sprintf("-ERR %s\r\n",val.Error())
+ return []byte(errorString)
+ case []string:
+ size := len(val)
+ result := []byte(fmt.Sprintf("*%d\r\n", size))
+ for i := 0; i < size; i++ {
+ result = append(result, SerializeRESP(val[i])...)
+ }
+ return result
+ case []any:
+ size := len(val)
+ result := []byte(fmt.Sprintf("*%d\r\n", size))
+ for i := 0; i < size; i++ {
+ result = append(result, SerializeRESP(val[i])...)
+ }
+ return result
+ case map[string]string:
+ size := len(val)
+ result := []byte(fmt.Sprintf("*%d\r\n", size*2))
+ for key, value := range val {
+ result = append(result, SerializeRESP(key)...)
+ result = append(result, SerializeRESP(value)...)
+ }
+ return result
+ case SimpleString:
+ simpleStr := fmt.Sprintf("+%s\r\n", val)
+ return []byte(simpleStr)
+ default:
+ return []byte("-ERR internal server error: unknown type\r\n")
+ }
+}