package actor import "net/http" type GrainPool[V any] interface { Apply(id uint64, mutation any) (V, error) Get(id uint64) (V, error) OwnerHost(id uint64) (Host, bool) Hostname() string TakeOwnership(id uint64) HandleOwnershipChange(host string, ids []uint64) error HandleRemoteExpiry(host string, ids []uint64) error Negotiate(otherHosts []string) GetLocalIds() []uint64 RemoveHost(host string) IsHealthy() bool Close() } // Host abstracts a remote node capable of proxying cart requests. type Host interface { Name() string Proxy(id uint64, w http.ResponseWriter, r *http.Request) (bool, error) GetActorIds() []uint64 }