From f18210c30e67de4bede7c6080d85629f7086676c Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 10 Jul 2026 20:28:47 +0200 Subject: separated commands into their own files TODO: refactor all commands to work like this --- pkg/core/redisDB.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 pkg/core/redisDB.go (limited to 'pkg/core/redisDB.go') 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") + } +} -- cgit v1.2.3