package events type EventHandler interface { Add(event Event, handler func(payload any)) Fire(event Event, payload any) } var _ EventHandler = &EventHandlerImpl{} type EventHandlerImpl struct { handlers map[Event]func(payload any) } func NewEventHandler() *EventHandlerImpl { return &EventHandlerImpl{ handlers: make(map[Event]func(payload any)), } } func (h *EventHandlerImpl) Add(event Event, handler func(payload any)) { h.handlers[event] = handler } func (h *EventHandlerImpl) Fire(event Event, payload any) { if handler, ok := h.handlers[event]; ok { handler(payload) } }