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 }