mirror of
https://github.com/duke-git/lancet.git
synced 2026-03-01 00:35:28 +08:00
Merge branch 'rc' into v2
This commit is contained in:
@@ -21,7 +21,7 @@ type EventBus[T any] struct {
|
|||||||
// listeners map[string][]*EventListener[T]
|
// listeners map[string][]*EventListener[T]
|
||||||
listeners sync.Map
|
listeners sync.Map
|
||||||
mu sync.RWMutex
|
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.
|
// 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]) {
|
func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event[T]) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil && eb.errorHandler != nil {
|
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.
|
// SetErrorHandler sets the error handler function.
|
||||||
// Play: https://go.dev/play/p/gmB0gnFe5mc
|
// 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
|
eb.errorHandler = handler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ func ExampleEventBus_GetListenersCount() {
|
|||||||
func ExampleEventBus_SetErrorHandler() {
|
func ExampleEventBus_SetErrorHandler() {
|
||||||
eb := NewEventBus[int]()
|
eb := NewEventBus[int]()
|
||||||
|
|
||||||
eb.SetErrorHandler(func(err error) {
|
eb.SetErrorHandler(func(topic string, err error) {
|
||||||
fmt.Println(err)
|
fmt.Println(topic, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
eb.Subscribe("event1", func(eventData int) {
|
eb.Subscribe("event1", func(eventData int) {
|
||||||
@@ -200,7 +200,7 @@ func ExampleEventBus_SetErrorHandler() {
|
|||||||
eb.Publish(Event[int]{Topic: "event1", Payload: 1})
|
eb.Publish(Event[int]{Topic: "event1", Payload: 1})
|
||||||
|
|
||||||
// Output:
|
// Output:
|
||||||
// error
|
// event1 error
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExampleEventBus_GetAllListenersCount() {
|
func ExampleEventBus_GetAllListenersCount() {
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ func TestEventBus_ErrorHandler(t *testing.T) {
|
|||||||
|
|
||||||
eb := NewEventBus[string]()
|
eb := NewEventBus[string]()
|
||||||
|
|
||||||
eb.SetErrorHandler(func(err error) {
|
eb.SetErrorHandler(func(topic string, err error) {
|
||||||
|
assert.Equal("event1", topic)
|
||||||
assert.Equal("error", err.Error())
|
assert.Equal("error", err.Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -238,6 +238,9 @@ func Sum[T constraints.Integer | constraints.Float](numbers ...T) T {
|
|||||||
// Average return average value of numbers.
|
// Average return average value of numbers.
|
||||||
// Play: https://go.dev/play/p/Vv7LBwER-pz
|
// Play: https://go.dev/play/p/Vv7LBwER-pz
|
||||||
func Average[T constraints.Integer | constraints.Float](numbers ...T) float64 {
|
func Average[T constraints.Integer | constraints.Float](numbers ...T) float64 {
|
||||||
|
if len(numbers) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
var sum float64
|
var sum float64
|
||||||
for _, num := range numbers {
|
for _, num := range numbers {
|
||||||
sum += float64(num)
|
sum += float64(num)
|
||||||
|
|||||||
Reference in New Issue
Block a user