package state import ( "context" "encoding/json" "errors" "flux/core" "github.com/cockroachdb/pebble/v2" ) type pebbleStateValue struct { backend *PebbleStateBackend stateID uint8 } func (p *pebbleStateValue) Update(ctx context.Context, newVal any) (any, error) { key := p.backend.deserialize(p.stateID) // convert newVal to []byte raw v, err := json.Marshal(newVal) if err != nil { return nil, err } err = p.backend.db.Set(key, v, pebble.NoSync) if err != nil { return nil, err } return newVal, nil } func (p *pebbleStateValue) Value(ctx context.Context) (any, error) { key := p.backend.deserialize(p.stateID) v, closer, err := p.backend.db.Get(key) if err != nil { if errors.Is(err, pebble.ErrNotFound) { return nil, nil } return nil, err } defer closer.Close() res := core.GetBuffer(len(v)) copy(res, v) return v, nil } func (p *pebbleStateValue) Clear(ctx context.Context) error { key := p.backend.deserialize(p.stateID) return p.backend.db.Delete(key, pebble.NoSync) }