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