package events type EventCallback func(args ...any) type Event struct { Evtn string Callback EventCallback Once bool } type EventEmitter struct { Events map[string][]Event } func NewEventEmitter() EventEmitter { return EventEmitter{ Events: map[string][]Event{}, } } func (evt *EventEmitter) On(evtn string, callback EventCallback) { if evt.Events[evtn] == nil { evt.Events[evtn] = []Event{} } evt.Events[evtn] = append(evt.Events[evtn], Event{ Evtn: evtn, Callback: callback, Once: false, }) } func (evt *EventEmitter) Emit(evtn string, args ...any) { if evt.Events[evtn] == nil { return } for _, e := range evt.Events[evtn] { if e.Callback != nil { e.Callback(args...) } } }