Files
promptkit/internal/observation/compose.go

31 lines
572 B
Go
Raw Normal View History

2026-11-14 01:26:49 +00:00
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
2026-11-14 01:26:49 +00:00
for _, observer := range observers {
if observer != nil {
count++
single = observer
2026-11-14 01:26:49 +00:00
}
}
if count == 0 {
2026-11-14 01:26:49 +00:00
return nil
}
if count == 1 {
return single
}
selected := make([]F, 0, count)
for _, observer := range observers {
if observer != nil {
selected = append(selected, observer)
}
}
2026-11-14 01:26:49 +00:00
return func(event T) {
for _, observer := range selected {
observer(event)
}
}
}