add list basics
This commit is contained in:
parent
378d7a5802
commit
8a67d4e0c0
2 changed files with 63 additions and 1 deletions
62
list.go
Normal file
62
list.go
Normal file
|
@ -0,0 +1,62 @@
|
|||
package state
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type uniqueList struct {
|
||||
store StateStore
|
||||
storeKey string
|
||||
data map[string][]byte
|
||||
}
|
||||
|
||||
func NewUniqueList(store StateStore, storeKey string) uniqueList {
|
||||
l := uniqueList{store: store}
|
||||
l.data = make(map[string][]byte)
|
||||
l.storeKey = storeKey
|
||||
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *uniqueList) persist() error {
|
||||
err := l.store.StoreState(l.storeKey, l.data)
|
||||
return err
|
||||
}
|
||||
|
||||
func (l *uniqueList) AddItem(key string, item any) error {
|
||||
data, err := json.Marshal(item)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
l.data[key] = data
|
||||
err = l.persist()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *uniqueList) ItemExists(key string) (bool, error) {
|
||||
_, ok := l.data[key]
|
||||
return ok, nil
|
||||
}
|
||||
|
||||
func (l *uniqueList) GetList(data []any) error {
|
||||
element := reflect.TypeOf(data).Elem()
|
||||
var err error
|
||||
|
||||
for _, dataByte := range l.data {
|
||||
new := reflect.New(element)
|
||||
err = json.Unmarshal(dataByte, &new)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
data = append(data, new)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -109,7 +109,7 @@ func TestRamState(t *testing.T) {
|
|||
assert.Nil(t, err, "should be save stater without error")
|
||||
|
||||
err = store.GetState("something", &dataFromStore)
|
||||
assert.Nil(t, err, "should be able to get data from stroe without error")
|
||||
assert.Nil(t, err, "should be able to get data from store without error")
|
||||
|
||||
assert.Equal(t, result, dataFromStore, "should get correct data from store")
|
||||
|
||||
|
|
Reference in a new issue