Skip to content
This repository has been archived by the owner on Sep 6, 2022. It is now read-only.

Commit

Permalink
eventbus: minor godoc and interface edits.
Browse files Browse the repository at this point in the history
  • Loading branch information
raulk committed Jun 21, 2019
1 parent cee4db9 commit 68bc7b7
Showing 1 changed file with 32 additions and 26 deletions.
58 changes: 32 additions & 26 deletions event/bus.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,48 +22,54 @@ type Emitter 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{}
Close() error
}

// Bus is an interface for a type-based event delivery system.
type Bus interface {
// Subscribe creates a new subscription.
// Subscribe creates a new Subscription.
//
// eventType can be either a pointer to a single event type, or a slice of pointers to
// subscribe to multiple event types at once, under a single subscription (and channel).
//
// Failing to drain the channel may cause publishers to block. CancelFunc is guaranteed
// to return after last send to the channel.
//
// EventType must be a pointer to a event type or an array of pointers
// Simple example
//
// Failing to drain the channel may cause publishers to block. CancelFunc must return after
// last send to the channel.
// sub, err := eventbus.Subscribe(new(EventType))
// defer sub.Close()
// for e := range sub.Out() {
// event := e.(EventType) // guaranteed safe
// [...]
// }
//
// Simple Example:
// sub, err := eventbus.Subscribe(new(EventType))
// defer sub.Close()
// for e := range sub.Out() {
// event := e.(EventType) // guaranteed safe
// [...]
// }
// Multi-type example
//
// 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:
// [...]
// }
// }
// 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.
//
// eventType accepts typed nil pointers, and uses the type information for wiring purposes.
//
// Example:
// em, err := eventbus.Emitter(new(EventT))
// defer em.Close() // MUST call this after being done with the emitter
// em.Emit(EventT{})
// em, err := eventbus.Emitter(new(EventT))
// defer em.Close() // MUST call this after being done with the emitter
// em.Emit(EventT{})
Emitter(eventType interface{}, opts ...EmitterOpt) (Emitter, error)
}

0 comments on commit 68bc7b7

Please sign in to comment.