diff --git a/interface.go b/interface.go index 477d84b..5953836 100644 --- a/interface.go +++ b/interface.go @@ -10,6 +10,22 @@ type SubSettings struct { } type SubOption func(*SubSettings) error +// ForceSubType is a Subscribe option which overrides the type to which +// the subscription will be done. Note that the evtType must be assignable +// to channel type. +// +// This also allows for subscribing to multiple eventbus channels with one +// Go channel to get better ordering guarantees. +// +// Example: +// type Event struct{} +// func (Event) String() string { +// return "event" +// } +// +// eventCh := make(chan fmt.Stringer) // interface { String() string } +// cancel, err := eventbus.Subscribe(eventCh, event.ForceSubType(new(Event))) +// [...] func ForceSubType(evtType interface{}) SubOption { return func(s *SubSettings) error { typ := reflect.TypeOf(evtType) @@ -26,10 +42,18 @@ type EmitterSettings struct{ } type EmitterOption func(*EmitterSettings) +// Stateful is an Emitter option which makes makes the eventbus channel +// 'remember' last event sent, and when a new subscriber joins the +// bus, the remembered event is immediately sent to the subscription +// channel. +// +// This allows to provide state tracking for dynamic systems, and/or +// allows new subscribers to verify that there are Emitters on the channel func Stateful(s *EmitterSettings) { s.makeStateful = true } +// Bus is an interface to type-based event delivery system type Bus interface { // Subscribe creates new subscription. Failing to drain the channel will cause // publishers to get blocked