type Notifier[E any] interface {
// Notify allows adding an element to the stream which will then be delivered to the waiters.// messages fan out to all waiters.
Notify(ctx context.Context, elem E) error
}
type Waiter[E any] interface {
// Wait receives elements from the stream starting from the point in time when this function is called.// when the context is done, the channel gets closed.
Wait(ctx context.Context) <-chan E
}