Commit 786c4f4e authored by Łukasz Magiera's avatar Łukasz Magiera Committed by Raúl Kripalani

eventbus interface changes (#22)

parent 5f4de346
...@@ -22,19 +22,45 @@ type Emitter interface { ...@@ -22,19 +22,45 @@ type Emitter interface {
Emit(evt interface{}) Emit(evt interface{})
} }
// Subscription represents a subscription to one or multiple event types.
type Subscription interface {
io.Closer
// Out returns the channel from which to consume events.
Out() <-chan interface{}
}
// Bus is an interface for a type-based event delivery system. // Bus is an interface for a type-based event delivery system.
type Bus interface { type Bus interface {
// Subscribe creates a new subscription. // Subscribe creates a new Subscription.
// //
// Failing to drain the channel may cause publishers to block. CancelFunc must return after // eventType can be either a pointer to a single event type, or a slice of pointers to
// last send to the channel. // subscribe to multiple event types at once, under a single subscription (and channel).
// //
// Example: // Failing to drain the channel may cause publishers to block.
// ch := make(chan EventT, 10) //
// defer close(ch) // Simple example
// cancel, err := eventbus.Subscribe(ch) //
// defer cancel() // sub, err := eventbus.Subscribe(new(EventType))
Subscribe(typedChan interface{}, opts ...SubscriptionOpt) (CancelFunc, error) // defer sub.Close()
// for e := range sub.Out() {
// event := e.(EventType) // guaranteed safe
// [...]
// }
//
// Multi-type example
//
// sub, err := eventbus.Subscribe([]interface{}{new(EventA), new(EventB)})
// defer sub.Close()
// for e := range sub.Out() {
// select e.(type):
// case EventA:
// [...]
// case EventB:
// [...]
// }
// }
Subscribe(eventType interface{}, opts ...SubscriptionOpt) (Subscription, error)
// Emitter creates a new event emitter. // Emitter creates a new event emitter.
// //
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment