func (db *stateStore) State(id types.Id, key string) ([]byte, types.Error) { db.RLock() defer db.RUnlock() bucket := db.buckets[id] if bucket == nil { return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist") } bucket.RLock() defer bucket.RUnlock() value := bucket.states[key] return value, nil }
func (db *stateStore) States(id types.Id) ([]interfaces.State, types.Error) { db.RLock() defer db.RUnlock() bucket := db.buckets[id] if bucket == nil { return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist") } bucket.RLock() defer bucket.RUnlock() states := make([]interfaces.State, 0, len(bucket.states)) for key, value := range bucket.states { states = append(states, state{key, value}) } return states, nil }
func (db *stateStore) SetState(id types.Id, key string, value []byte) ([]byte, types.Error) { db.RLock() defer db.RUnlock() bucket := db.buckets[id] if bucket == nil { return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist") } bucket.Lock() defer bucket.Unlock() oldValue := bucket.states[key] if len(value) == 0 { delete(bucket.states, key) } else { bucket.states[key] = value } return oldValue, nil }