add list basics

This commit is contained in:
kekskurse 2024-03-04 11:56:34 +01:00
parent 378d7a5802
commit 8a67d4e0c0
2 changed files with 63 additions and 1 deletions

62
list.go Normal file
View 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
}

View File

@ -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")