From e43a46e9822a05dd0345a7676e03285ddf83205e Mon Sep 17 00:00:00 2001 From: "kim (grufwub)" Date: Sat, 11 Sep 2021 20:12:47 +0100 Subject: add git.iim.gay/grufwub/go-store for storage backend, replacing blob.Storage Signed-off-by: kim (grufwub) --- vendor/git.iim.gay/grufwub/go-store/kv/state.go | 125 ++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 vendor/git.iim.gay/grufwub/go-store/kv/state.go (limited to 'vendor/git.iim.gay/grufwub/go-store/kv/state.go') diff --git a/vendor/git.iim.gay/grufwub/go-store/kv/state.go b/vendor/git.iim.gay/grufwub/go-store/kv/state.go new file mode 100644 index 000000000..a8bc64637 --- /dev/null +++ b/vendor/git.iim.gay/grufwub/go-store/kv/state.go @@ -0,0 +1,125 @@ +package kv + +import ( + "io" + + "git.iim.gay/grufwub/go-errors" +) + +var ErrStateClosed = errors.Define("store/kv: state closed") + +// StateRO provides a read-only window to the store. While this +// state is active during the Read() function window, the entire +// store will be read-locked. The state is thread-safe for concurrent +// use UNTIL the moment that your supplied function to Read() returns, +// then the state has zero guarantees +type StateRO struct { + store *KVStore +} + +func (st *StateRO) Get(key string) ([]byte, error) { + // Check not closed + if st.store == nil { + return nil, ErrStateClosed + } + + // Pass request to store + return st.store.get(key) +} + +func (st *StateRO) GetStream(key string) (io.ReadCloser, error) { + // Check not closed + if st.store == nil { + return nil, ErrStateClosed + } + + // Pass request to store + return st.store.getStream(key) +} + +func (st *StateRO) Has(key string) (bool, error) { + // Check not closed + if st.store == nil { + return false, ErrStateClosed + } + + // Pass request to store + return st.store.has(key) +} + +func (st *StateRO) close() { + st.store = nil +} + +// StateRW provides a read-write window to the store. While this +// state is active during the Update() function window, the entire +// store will be locked. The state is thread-safe for concurrent +// use UNTIL the moment that your supplied function to Update() returns, +// then the state has zero guarantees +type StateRW struct { + store *KVStore +} + +func (st *StateRW) Get(key string) ([]byte, error) { + // Check not closed + if st.store == nil { + return nil, ErrStateClosed + } + + // Pass request to store + return st.store.get(key) +} + +func (st *StateRW) GetStream(key string) (io.ReadCloser, error) { + // Check not closed + if st.store == nil { + return nil, ErrStateClosed + } + + // Pass request to store + return st.store.getStream(key) +} + +func (st *StateRW) Put(key string, value []byte) error { + // Check not closed + if st.store == nil { + return ErrStateClosed + } + + // Pass request to store + return st.store.put(key, value) +} + +func (st *StateRW) PutStream(key string, r io.Reader) error { + // Check not closed + if st.store == nil { + return ErrStateClosed + } + + // Pass request to store + return st.store.putStream(key, r) +} + +func (st *StateRW) Has(key string) (bool, error) { + // Check not closed + if st.store == nil { + return false, ErrStateClosed + } + + // Pass request to store + return st.store.has(key) +} + +func (st *StateRW) Delete(key string) error { + // Check not closed + if st.store == nil { + return ErrStateClosed + } + + // Pass request to store + return st.store.delete(key) +} + +func (st *StateRW) close() { + st.store = nil +} -- cgit v1.2.3