diff --git a/list.go b/list.go new file mode 100644 index 0000000..63c70cf --- /dev/null +++ b/list.go @@ -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 +} diff --git a/state_test.go b/state_test.go index 9390eb9..4d35056 100644 --- a/state_test.go +++ b/state_test.go @@ -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")