state: expose aids and use instance id as key
All checks were successful
Tests / Go tests (push) Successful in 39s
Nix / NixOS tests (push) Successful in 3m26s

Fortify state store instances was specific to aids due to outdated design decisions carried over from the ego rewrite. That no longer makes sense in the current application, so the interface now enables a single store object to manage all transient state.

Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
This commit is contained in:
2024-12-19 21:36:17 +09:00
parent 5ea7333431
commit eae3034260
8 changed files with 353 additions and 154 deletions

View File

@@ -6,21 +6,27 @@ import (
"git.ophivana.moe/security/fortify/fst"
)
type Entries map[fst.ID]*State
type Store interface {
// Do calls f exactly once and ensures store exclusivity until f returns.
// Returns whether f is called and any errors during the locking process.
// Backend provided to f becomes invalid as soon as f returns.
Do(f func(b Backend)) (bool, error)
// Cursor provided to f becomes invalid as soon as f returns.
Do(aid int, f func(c Cursor)) (ok bool, err error)
// List queries the store and returns a list of aids known to the store.
// Note that some or all returned aids might not have any active apps.
List() (aids []int, err error)
// Close releases any resources held by Store.
Close() error
}
// Backend provides access to the store
type Backend interface {
// Cursor provides access to the store
type Cursor interface {
Save(state *State) error
Destroy(pid int) error
Load() ([]*State, error)
Destroy(id fst.ID) error
Load() (Entries, error)
Len() (int, error)
}