66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package parts
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
stdio "git.novox.be/novox/mesh-sdk/go"
|
|
"git.novox.be/novox/mesh-sdk/go/busstate"
|
|
)
|
|
|
|
// BusObjects is a Receiver's Objects over the holder's own object store, asked for in `requires` by local (the
|
|
// template objects, novox/hq ADR 0595 §2), through the runtime: every holder binds the same adapter, none its own.
|
|
func BusObjects(local string) Objects { return busObjects{busstate.ObjectsOf(local)} }
|
|
|
|
type busObjects struct{ o busstate.Objects }
|
|
|
|
func (b busObjects) Put(name string, data []byte) error {
|
|
_, err := b.o.Put(name, data, "")
|
|
return err
|
|
}
|
|
func (b busObjects) Get(name string) ([]byte, error) {
|
|
d, err := b.o.Get(name)
|
|
return d.Data, err
|
|
}
|
|
func (b busObjects) Delete(name string) error { return b.o.Delete(name) }
|
|
func (b busObjects) Used() (uint64, error) {
|
|
f, err := b.o.Fill()
|
|
return f.Bytes, err
|
|
}
|
|
|
|
// BusTransfers is a Receiver's Transfers over the holder's own key-value state of that name (the template state),
|
|
// through the runtime, each transfer under its id.
|
|
func BusTransfers[M any](state string) Transfers[M] { return busTransfers[M]{state} }
|
|
|
|
type busTransfers[M any] struct{ state string }
|
|
|
|
func (b busTransfers[M]) Get(id string) (Transfer[M], bool, error) {
|
|
var t Transfer[M]
|
|
e, err := stdio.State(b.state).Get(id)
|
|
if err != nil || e == nil {
|
|
return t, false, err
|
|
}
|
|
return t, true, json.Unmarshal(e.Value, &t)
|
|
}
|
|
func (b busTransfers[M]) Put(t Transfer[M]) error {
|
|
if t.ID == "" {
|
|
return errors.New("a transfer without an id cannot be kept")
|
|
}
|
|
_, err := stdio.State(b.state).Put(t.ID, t)
|
|
return err
|
|
}
|
|
func (b busTransfers[M]) Delete(id string) error { return stdio.State(b.state).Delete(id) }
|
|
func (b busTransfers[M]) List() ([]Transfer[M], error) {
|
|
keys, err := stdio.State(b.state).Keys()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var out []Transfer[M]
|
|
for _, k := range keys {
|
|
if t, ok, err := b.Get(k); err == nil && ok {
|
|
out = append(out, t)
|
|
}
|
|
}
|
|
return out, nil
|
|
}
|