package client import ( "slices" "sync" "time" "go-mod.ewintr.nl/planner/item" ) type Memory struct { items map[string]item.Item sync.RWMutex } func NewMemory() *Memory { return &Memory{ items: make(map[string]item.Item, 0), } } func (m *Memory) Update(items []item.Item) error { m.Lock() defer m.Unlock() for _, i := range items { m.items[i.ID] = i } return nil } func (m *Memory) Updated(kw []item.Kind, ts time.Time) ([]item.Item, error) { m.RLock() defer m.RUnlock() res := make([]item.Item, 0) for _, i := range m.items { if slices.Contains(kw, i.Kind) && (i.Updated.After(ts) || i.Updated.Equal(ts)) { res = append(res, i) } } return res, nil }