go-scopes/lib/action/action.go

60 lines
1,018 B
Go

package action
import "git.sr.ht/~cco/go-scopes/lib"
type baseSpec struct {
handler lib.ActionHandler
receivers []string
}
func (spec *baseSpec) Handler() lib.ActionHandler {
return spec.handler
}
func (spec *baseSpec) Receivers() []string {
return spec.receivers
}
func BaseSpec(hdlr lib.ActionHandler, rcvrs []string) *baseSpec {
return &baseSpec{hdlr, rcvrs}
}
// action selection
func Select(ctx lib.Context, msg lib.Message) []lib.Action {
var acts []lib.Action
// act := action{ctx, spec, msg}
// acts = append(acts, &act)
return acts
}
// action
type action struct {
ctx lib.Context
spec lib.ActionSpec
msg lib.Message
}
func (act *action) Context() lib.Context {
return act.ctx
}
func (act *action) Spec() lib.ActionSpec {
return act.spec
}
func (act *action) Message() lib.Message {
return act.msg
}
func (act *action) Handle() bool {
return act.spec.Handler()(act)
}
// predefined action handlers
func Forward(act lib.Action) bool {
// Send(ctx, addr. msg)
return true
}