diff --git a/eventbus/eventbus.go b/eventbus/eventbus.go index 8fe9b25..e616a7f 100644 --- a/eventbus/eventbus.go +++ b/eventbus/eventbus.go @@ -21,7 +21,7 @@ type EventBus[T any] struct { // listeners map[string][]*EventListener[T] listeners sync.Map mu sync.RWMutex - errorHandler func(err error) + errorHandler func(topic string, err error) } // EventListener is the struct that holds the listener function and its priority. @@ -117,7 +117,7 @@ func (eb *EventBus[T]) Publish(event Event[T]) { func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event[T]) { defer func() { if r := recover(); r != nil && eb.errorHandler != nil { - eb.errorHandler(fmt.Errorf("%v", r)) + eb.errorHandler(event.Topic, fmt.Errorf("%v", r)) } }() @@ -126,7 +126,7 @@ func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event // SetErrorHandler sets the error handler function. // Play: https://go.dev/play/p/gmB0gnFe5mc -func (eb *EventBus[T]) SetErrorHandler(handler func(err error)) { +func (eb *EventBus[T]) SetErrorHandler(handler func(topic string, err error)) { eb.errorHandler = handler } diff --git a/eventbus/eventbus_example_test.go b/eventbus/eventbus_example_test.go index cac6d8c..e6fc749 100644 --- a/eventbus/eventbus_example_test.go +++ b/eventbus/eventbus_example_test.go @@ -189,8 +189,8 @@ func ExampleEventBus_GetListenersCount() { func ExampleEventBus_SetErrorHandler() { eb := NewEventBus[int]() - eb.SetErrorHandler(func(err error) { - fmt.Println(err) + eb.SetErrorHandler(func(topic string, err error) { + fmt.Println(topic, err) }) eb.Subscribe("event1", func(eventData int) { @@ -200,7 +200,7 @@ func ExampleEventBus_SetErrorHandler() { eb.Publish(Event[int]{Topic: "event1", Payload: 1}) // Output: - // error + // event1 error } func ExampleEventBus_GetAllListenersCount() { diff --git a/eventbus/eventbus_test.go b/eventbus/eventbus_test.go index dc90ca4..7d232bc 100644 --- a/eventbus/eventbus_test.go +++ b/eventbus/eventbus_test.go @@ -114,7 +114,8 @@ func TestEventBus_ErrorHandler(t *testing.T) { eb := NewEventBus[string]() - eb.SetErrorHandler(func(err error) { + eb.SetErrorHandler(func(topic string, err error) { + assert.Equal("event1", topic) assert.Equal("error", err.Error()) }) diff --git a/mathutil/mathutil.go b/mathutil/mathutil.go index eac0239..c617360 100644 --- a/mathutil/mathutil.go +++ b/mathutil/mathutil.go @@ -238,6 +238,9 @@ func Sum[T constraints.Integer | constraints.Float](numbers ...T) T { // Average return average value of numbers. // Play: https://go.dev/play/p/Vv7LBwER-pz func Average[T constraints.Integer | constraints.Float](numbers ...T) float64 { + if len(numbers) == 0 { + return 0 + } var sum float64 for _, num := range numbers { sum += float64(num)