aboutsummaryrefslogtreecommitdiff
path: root/storage/memory_storage.go
diff options
context:
space:
mode:
Diffstat (limited to 'storage/memory_storage.go')
-rw-r--r--storage/memory_storage.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/storage/memory_storage.go b/storage/memory_storage.go
new file mode 100644
index 0000000..0c90981
--- /dev/null
+++ b/storage/memory_storage.go
@@ -0,0 +1,41 @@
+package storage
+
+import (
+ "code.laria.me/petrific/objects"
+)
+
+type MemoryStorage struct {
+ objects map[string][]byte
+ bytype map[objects.ObjectType][]objects.ObjectId
+}
+
+func NewMemoryStorage() Storage {
+ return MemoryStorage{
+ objects: make(map[string][]byte),
+ bytype: make(map[objects.ObjectType][]objects.ObjectId),
+ }
+}
+
+func (ms MemoryStorage) Get(id objects.ObjectId) ([]byte, error) {
+ b, ok := ms.objects[id.String()]
+ if !ok {
+ return nil, ObjectNotFound
+ }
+ return b, nil
+}
+
+func (ms MemoryStorage) Has(id objects.ObjectId) (bool, error) {
+ _, ok := ms.objects[id.String()]
+ return ok, nil
+}
+
+func (ms MemoryStorage) Set(id objects.ObjectId, typ objects.ObjectType, raw []byte) error {
+ ms.objects[id.String()] = raw
+ ms.bytype[typ] = append(ms.bytype[typ], id)
+
+ return nil
+}
+
+func (ms MemoryStorage) List(typ objects.ObjectType) ([]objects.ObjectId, error) {
+ return ms.bytype[typ], nil
+}