mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 04:22:24 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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
 | |
| }
 |