summaryrefslogtreecommitdiff
path: root/internal/blob/inmem.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/blob/inmem.go')
-rw-r--r--internal/blob/inmem.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/internal/blob/inmem.go b/internal/blob/inmem.go
new file mode 100644
index 000000000..6ea64bcfe
--- /dev/null
+++ b/internal/blob/inmem.go
@@ -0,0 +1,55 @@
+package blob
+
+import (
+ "fmt"
+
+ "github.com/sirupsen/logrus"
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+)
+
+// NewInMem returns an in-memory implementation of the Storage interface.
+// This is good for testing and whatnot but ***SHOULD ABSOLUTELY NOT EVER
+// BE USED IN A PRODUCTION SETTING***, because A) everything will be wiped out
+// if you restart the server and B) if you store lots of images your RAM use
+// will absolutely go through the roof.
+func NewInMem(c *config.Config, log *logrus.Logger) (Storage, error) {
+ return &inMemStorage{
+ stored: make(map[string][]byte),
+ log: log,
+ }, nil
+}
+
+type inMemStorage struct {
+ stored map[string][]byte
+ log *logrus.Logger
+}
+
+func (s *inMemStorage) StoreFileAt(path string, data []byte) error {
+ l := s.log.WithField("func", "StoreFileAt")
+ l.Debugf("storing at path %s", path)
+ s.stored[path] = data
+ return nil
+}
+
+func (s *inMemStorage) RetrieveFileFrom(path string) ([]byte, error) {
+ l := s.log.WithField("func", "RetrieveFileFrom")
+ l.Debugf("retrieving from path %s", path)
+ d, ok := s.stored[path]
+ if !ok || len(d) == 0 {
+ return nil, fmt.Errorf("no data found at path %s", path)
+ }
+ return d, nil
+}
+
+func (s *inMemStorage) ListKeys() ([]string, error) {
+ keys := []string{}
+ for k := range s.stored {
+ keys = append(keys, k)
+ }
+ return keys, nil
+}
+
+func (s *inMemStorage) RemoveFileAt(path string) error {
+ delete(s.stored, path)
+ return nil
+}