Files
promptkit/internal/observation/compose.go

31 lines
572 B
Go

package observation
// Compose copies and synchronously invokes non-nil observers in order.
func Compose[T any, F ~func(T)](observers ...F) F {
count := 0
var single F
for _, observer := range observers {
if observer != nil {
count++
single = observer
}
}
if count == 0 {
return nil
}
if count == 1 {
return single
}
selected := make([]F, 0, count)
for _, observer := range observers {
if observer != nil {
selected = append(selected, observer)
}
}
return func(event T) {
for _, observer := range selected {
observer(event)
}
}
}