summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-store
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2021-11-27 15:26:58 +0100
committerLibravatar GitHub <noreply@github.com>2021-11-27 15:26:58 +0100
commit182b4eea73881c611a0f519576aa6ad2aa6799c2 (patch)
tree230fac469690fcee8797b13585e739be148d4789 /vendor/codeberg.org/gruf/go-store
parentRequire confirmed email when checking oauth token (#332) (diff)
downloadgotosocial-182b4eea73881c611a0f519576aa6ad2aa6799c2.tar.xz
Update dependencies (#333)
Diffstat (limited to 'vendor/codeberg.org/gruf/go-store')
-rw-r--r--vendor/codeberg.org/gruf/go-store/kv/store.go2
-rw-r--r--vendor/codeberg.org/gruf/go-store/storage/block.go2
-rw-r--r--vendor/codeberg.org/gruf/go-store/storage/disk.go2
-rw-r--r--vendor/codeberg.org/gruf/go-store/storage/memory.go131
-rw-r--r--vendor/codeberg.org/gruf/go-store/storage/storage.go2
5 files changed, 135 insertions, 4 deletions
diff --git a/vendor/codeberg.org/gruf/go-store/kv/store.go b/vendor/codeberg.org/gruf/go-store/kv/store.go
index d25b3fb04..148e3f33d 100644
--- a/vendor/codeberg.org/gruf/go-store/kv/store.go
+++ b/vendor/codeberg.org/gruf/go-store/kv/store.go
@@ -196,7 +196,7 @@ func (st *KVStore) Iterator(matchFn func(string) bool) (*KVIterator, error) {
}
// Walk keys in the storage
- err := st.storage.WalkKeys(&storage.WalkKeysOptions{WalkFn: walkFn})
+ err := st.storage.WalkKeys(storage.WalkKeysOptions{WalkFn: walkFn})
if err != nil {
st.mutex.RUnlock()
return nil, err
diff --git a/vendor/codeberg.org/gruf/go-store/storage/block.go b/vendor/codeberg.org/gruf/go-store/storage/block.go
index eb51a4cd3..112b67d80 100644
--- a/vendor/codeberg.org/gruf/go-store/storage/block.go
+++ b/vendor/codeberg.org/gruf/go-store/storage/block.go
@@ -569,7 +569,7 @@ func (st *BlockStorage) Remove(key string) error {
}
// WalkKeys implements Storage.WalkKeys()
-func (st *BlockStorage) WalkKeys(opts *WalkKeysOptions) error {
+func (st *BlockStorage) WalkKeys(opts WalkKeysOptions) error {
// Acquire path builder
pb := util.GetPathBuilder()
defer util.PutPathBuilder(pb)
diff --git a/vendor/codeberg.org/gruf/go-store/storage/disk.go b/vendor/codeberg.org/gruf/go-store/storage/disk.go
index 6b295755f..cbc365eed 100644
--- a/vendor/codeberg.org/gruf/go-store/storage/disk.go
+++ b/vendor/codeberg.org/gruf/go-store/storage/disk.go
@@ -251,7 +251,7 @@ func (st *DiskStorage) Remove(key string) error {
}
// WalkKeys implements Storage.WalkKeys()
-func (st *DiskStorage) WalkKeys(opts *WalkKeysOptions) error {
+func (st *DiskStorage) WalkKeys(opts WalkKeysOptions) error {
// Acquire path builder
pb := util.GetPathBuilder()
defer util.PutPathBuilder(pb)
diff --git a/vendor/codeberg.org/gruf/go-store/storage/memory.go b/vendor/codeberg.org/gruf/go-store/storage/memory.go
new file mode 100644
index 000000000..e30aef571
--- /dev/null
+++ b/vendor/codeberg.org/gruf/go-store/storage/memory.go
@@ -0,0 +1,131 @@
+package storage
+
+import (
+ "io"
+ "sync"
+
+ "codeberg.org/gruf/go-bytes"
+ "codeberg.org/gruf/go-store/util"
+)
+
+// MemoryStorage is a storage implementation that simply stores key-value
+// pairs in a Go map in-memory. The map is protected by a mutex.
+type MemoryStorage struct {
+ fs map[string][]byte
+ mu sync.Mutex
+}
+
+// OpenMemory opens a new MemoryStorage instance with internal map of 'size'.
+func OpenMemory(size int) *MemoryStorage {
+ return &MemoryStorage{
+ fs: make(map[string][]byte, size),
+ mu: sync.Mutex{},
+ }
+}
+
+// Clean implements Storage.Clean().
+func (st *MemoryStorage) Clean() error {
+ return nil
+}
+
+// ReadBytes implements Storage.ReadBytes().
+func (st *MemoryStorage) ReadBytes(key string) ([]byte, error) {
+ // Safely check store
+ st.mu.Lock()
+ b, ok := st.fs[key]
+ st.mu.Unlock()
+
+ // Return early if not exist
+ if !ok {
+ return nil, ErrNotFound
+ }
+
+ // Create return copy
+ return bytes.Copy(b), nil
+}
+
+// ReadStream implements Storage.ReadStream().
+func (st *MemoryStorage) ReadStream(key string) (io.ReadCloser, error) {
+ // Safely check store
+ st.mu.Lock()
+ b, ok := st.fs[key]
+ st.mu.Unlock()
+
+ // Return early if not exist
+ if !ok {
+ return nil, ErrNotFound
+ }
+
+ // Create io.ReadCloser from 'b' copy
+ b = bytes.Copy(b)
+ r := bytes.NewReader(b)
+ return util.NopReadCloser(r), nil
+}
+
+// WriteBytes implements Storage.WriteBytes().
+func (st *MemoryStorage) WriteBytes(key string, b []byte) error {
+ // Safely check store
+ st.mu.Lock()
+ _, ok := st.fs[key]
+
+ // Check for already exist
+ if ok {
+ st.mu.Unlock()
+ return ErrAlreadyExists
+ }
+
+ // Write + unlock
+ st.fs[key] = bytes.Copy(b)
+ st.mu.Unlock()
+ return nil
+}
+
+// WriteStream implements Storage.WriteStream().
+func (st *MemoryStorage) WriteStream(key string, r io.Reader) error {
+ // Read all from reader
+ b, err := io.ReadAll(r)
+ if err != nil {
+ return err
+ }
+
+ // Write to storage
+ return st.WriteBytes(key, b)
+}
+
+// Stat implements Storage.Stat().
+func (st *MemoryStorage) Stat(key string) (bool, error) {
+ st.mu.Lock()
+ _, ok := st.fs[key]
+ st.mu.Unlock()
+ return ok, nil
+}
+
+// Remove implements Storage.Remove().
+func (st *MemoryStorage) Remove(key string) error {
+ // Safely check store
+ st.mu.Lock()
+ _, ok := st.fs[key]
+
+ // Check in store
+ if !ok {
+ st.mu.Unlock()
+ return ErrNotFound
+ }
+
+ // Delete + unlock
+ delete(st.fs, key)
+ st.mu.Unlock()
+ return nil
+}
+
+// WalkKeys implements Storage.WalkKeys().
+func (st *MemoryStorage) WalkKeys(opts WalkKeysOptions) error {
+ // Safely walk storage keys
+ st.mu.Lock()
+ for key := range st.fs {
+ opts.WalkFn(entry(key))
+ }
+ st.mu.Unlock()
+
+ return nil
+}
diff --git a/vendor/codeberg.org/gruf/go-store/storage/storage.go b/vendor/codeberg.org/gruf/go-store/storage/storage.go
index 61f722111..b160267a4 100644
--- a/vendor/codeberg.org/gruf/go-store/storage/storage.go
+++ b/vendor/codeberg.org/gruf/go-store/storage/storage.go
@@ -41,7 +41,7 @@ type Storage interface {
Remove(key string) error
// WalkKeys walks the keys in the storage
- WalkKeys(opts *WalkKeysOptions) error
+ WalkKeys(opts WalkKeysOptions) error
}
// WalkKeysOptions defines how to walk the keys in a storage implementation