From 0976d4b358cbd82ff35f7afd124679ac8d9ee1a6 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera <kubuxu@protonmail.ch> Date: Tue, 25 Jun 2019 20:47:02 +0200 Subject: [PATCH] Enable buffering by default License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch> --- basic.go | 3 ++- basic_test.go | 11 +++++++++++ opts.go | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/basic.go b/basic.go index ca102b5..28df1d5 100644 --- a/basic.go +++ b/basic.go @@ -129,7 +129,7 @@ var _ event.Subscription = (*sub)(nil) // publishers to get blocked. CancelFunc is guaranteed to return after last send // to the channel func (b *basicBus) Subscribe(evtTypes interface{}, opts ...event.SubscriptionOpt) (_ event.Subscription, err error) { - var settings subSettings + settings := subSettings(subSettingsDefault) for _, opt := range opts { if err := opt(&settings); err != nil { return nil, err @@ -184,6 +184,7 @@ func (b *basicBus) Subscribe(evtTypes interface{}, opts ...event.SubscriptionOpt // emit(EventT{}) func (b *basicBus) Emitter(evtType interface{}, opts ...event.EmitterOpt) (e event.Emitter, err error) { var settings emitterSettings + for _, opt := range opts { if err := opt(&settings); err != nil { return nil, err diff --git a/basic_test.go b/basic_test.go index deddc6b..0f0ff6f 100644 --- a/basic_test.go +++ b/basic_test.go @@ -25,6 +25,17 @@ func (EventA) String() string { return "Oh, Hello" } +func TestDefaultSubIsBuffered(t *testing.T) { + bus := NewBus() + s, err := bus.Subscribe(new(EventA)) + if err != nil { + t.Fatal(err) + } + if cap(s.(*sub).ch) == 0 { + t.Fatalf("without any options subscribe should be buffered. was %d", cap(s.(*sub).ch)) + } +} + func TestEmit(t *testing.T) { bus := NewBus() sub, err := bus.Subscribe(new(EventA)) diff --git a/opts.go b/opts.go index 50c6736..9219235 100644 --- a/opts.go +++ b/opts.go @@ -4,6 +4,10 @@ type subSettings struct { buffer int } +var subSettingsDefault = subSettings{ + buffer: 16, +} + func BufSize(n int) func(interface{}) error { return func(s interface{}) error { s.(*subSettings).buffer = n