wisski-cloud-distillery/internal/wisski/ingredient/mstore/mstore.go
2022-11-16 13:07:14 +01:00

43 lines
1 KiB
Go

package mstore
import (
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/meta"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
"github.com/tkw1536/goprogram/lib/collection"
)
// MStore implements metadata storage for this WissKI
type MStore struct {
ingredient.Base
*meta.Storage
}
// For is a Store for the provided value
type For[Value any] meta.Key
func (f For[Value]) Get(m *MStore) (value Value, err error) {
err = m.Storage.Get(meta.Key(f), &value)
return
}
func (f For[Value]) GetAll(m *MStore) (values []Value, err error) {
err = m.Storage.GetAll(meta.Key(f), func(index, total int) any {
if values == nil {
values = make([]Value, total)
}
return &values[index]
})
return values, err
}
func (f For[Value]) Set(m *MStore, value Value) error {
return m.Storage.Set(meta.Key(f), value)
}
func (f For[Value]) SetAll(m *MStore, values ...Value) error {
return m.Storage.SetAll(meta.Key(f), collection.AsAny(values)...)
}
func (f For[Value]) Delete(m *MStore) error {
return m.Storage.Delete(meta.Key(f))
}