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  | 
