package main
import (
"fmt"
abxbus "github.com/ArchiveBox/abxbus/abxbus-go"
)
type UserActionEvent struct {
Action string `json:"action"`
}
func main() {
bus := abxbus.NewEventBus("AppBus", nil)
bus.On(func(event UserActionEvent) (string, error) {
return fmt.Sprintf("action:%s", event.Action), nil
})
bus.On("UserActionEvent", "on_by_name", func(event *abxbus.BaseEvent) (any, error) {
fmt.Println("by-name", event.EventType, event.Payload["action"])
// by-name UserActionEvent click
return nil, nil
}, nil)
bus.OnEventName("*", "on_any", func(event *abxbus.BaseEvent) (any, error) {
fmt.Println("wildcard", event.EventType)
// wildcard UserActionEvent
return nil, nil
}, nil)
_, err := bus.Emit(UserActionEvent{Action: "click"}).EventResult()
if err != nil {
panic(err)
}
namedMatch, err := bus.FindEventName("UserActionEvent", nil, nil)
if err != nil {
panic(err)
}
wildcardMatch, err := bus.FindEventName("*", nil, &abxbus.FindOptions{Future: 5.0})
if err != nil {
panic(err)
}
_, _ = namedMatch, wildcardMatch
}