diff options
Diffstat (limited to 'objectstore/memory_backend.go')
| -rw-r--r-- | objectstore/memory_backend.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/objectstore/memory_backend.go b/objectstore/memory_backend.go new file mode 100644 index 0000000..a21abca --- /dev/null +++ b/objectstore/memory_backend.go @@ -0,0 +1,58 @@ +// Basic in-memory object store +// +// Licensed under CC0 1.0 Universal: +// https://creativecommons.org/publicdomain/zero/1.0/legalcode +package objectstore + +import "fmt" + +type memBucket struct { + objects map[string]string +} + +type MemObjectStore struct { + buckets map[string]memBucket +} + +func NewMemBackend() *MemObjectStore { + os := &MemObjectStore{} + os.buckets = make(map[string]memBucket) + return os +} + +func (os *MemObjectStore) CreateObject(bucketId string, objectId string, object string) { + if bucket, ok := os.buckets[bucketId]; ok { + bucket.objects[objectId] = object + } else { + bucket := memBucket{} + bucket.objects = make(map[string]string) + + bucket.objects[objectId] = object + os.buckets[bucketId] = bucket + } +} + +func (os *MemObjectStore) GetObject(bucketId string, objectId string) (string, error) { + if bucket, ok := os.buckets[bucketId]; ok { + if object, ok := bucket.objects[objectId]; ok { + return object, nil + } else { + return "", fmt.Errorf("Object not found") + } + } else { + return "", fmt.Errorf("Bucket not found") + } +} + +func (os *MemObjectStore) DeleteObject(bucketId string, objectId string) error { + if bucket, ok := os.buckets[bucketId]; ok { + if _, ok := bucket.objects[objectId]; ok { + delete(bucket.objects, objectId) + return nil + } else { + return fmt.Errorf("Object not found") + } + } else { + return fmt.Errorf("Bucket not found") + } +} |
