internal/store: expose save via handle
All checks were successful
Test / Create distribution (push) Successful in 26s
Test / Sandbox (push) Successful in 42s
Test / Sandbox (race detector) (push) Successful in 42s
Test / Hakurei (push) Successful in 46s
Test / Hakurei (race detector) (push) Successful in 46s
Test / Hpkg (push) Successful in 42s
Test / Flake checks (push) Successful in 1m30s

The handle is otherwise inaccessible without the compat interface. This change also moves compatibility methods to separate adapter structs to avoid inadvertently using them.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2025-10-31 04:20:22 +09:00
parent b667fea1cb
commit 6a0ecced90
3 changed files with 35 additions and 21 deletions

View File

@@ -22,20 +22,20 @@ type Compat interface {
List() (identities []int, err error)
}
func (s *Store) Do(identity int, f func(c Cursor)) (bool, error) {
if h, err := s.Handle(identity); err != nil {
return false, err
} else {
return h.do(f)
}
}
// storeAdapter satisfies [Compat] via [Store].
type storeAdapter struct {
msg message.Msg
*Store
}
func (s storeAdapter) Do(identity int, f func(c Cursor)) (bool, error) {
if h, err := s.Handle(identity); err != nil {
return false, err
} else {
return handleAdapter{h}.do(f)
}
}
func (s storeAdapter) List() ([]int, error) {
segments, n, err := s.Segments()
if err != nil {
@@ -71,8 +71,11 @@ type Cursor interface {
Len() (int, error)
}
// handleAdapter satisfies [Cursor] via [Handle].
type handleAdapter struct{ *Handle }
// do implements [Compat.Do] on [Handle].
func (h *Handle) do(f func(c Cursor)) (bool, error) {
func (h handleAdapter) do(f func(c Cursor)) (bool, error) {
if unlock, err := h.Lock(); err != nil {
return false, err
} else {
@@ -85,15 +88,13 @@ func (h *Handle) do(f func(c Cursor)) (bool, error) {
/* these compatibility methods must only be called while fileMu is held */
func (h *Handle) Save(state *hst.State) error {
return (&EntryHandle{nil, h.Path.Append(state.ID.String()), state.ID}).Save(state)
}
func (h handleAdapter) Save(state *hst.State) error { _, err := h.Handle.Save(state); return err }
func (h *Handle) Destroy(id hst.ID) error {
func (h handleAdapter) Destroy(id hst.ID) error {
return (&EntryHandle{nil, h.Path.Append(id.String()), id}).Destroy()
}
func (h *Handle) Load() (map[hst.ID]*hst.State, error) {
func (h handleAdapter) Load() (map[hst.ID]*hst.State, error) {
entries, n, err := h.Entries()
if err != nil {
return nil, err
@@ -114,7 +115,7 @@ func (h *Handle) Load() (map[hst.ID]*hst.State, error) {
return r, err
}
func (h *Handle) Len() (int, error) {
func (h handleAdapter) Len() (int, error) {
entries, _, err := h.Entries()
if err != nil {
return -1, err