diff options
author | 2021-11-27 15:26:58 +0100 | |
---|---|---|
committer | 2021-11-27 15:26:58 +0100 | |
commit | 182b4eea73881c611a0f519576aa6ad2aa6799c2 (patch) | |
tree | 230fac469690fcee8797b13585e739be148d4789 /vendor/codeberg.org/gruf/go-store | |
parent | Require confirmed email when checking oauth token (#332) (diff) | |
download | gotosocial-182b4eea73881c611a0f519576aa6ad2aa6799c2.tar.xz |
Update dependencies (#333)
Diffstat (limited to 'vendor/codeberg.org/gruf/go-store')
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 |