updates #207
| @@ -211,6 +211,7 @@ func Stores(s ...store.Store) Option { | |||||||
| } | } | ||||||
|  |  | ||||||
| // Logger set the logger to use | // Logger set the logger to use | ||||||
|  | // | ||||||
| //nolint:gocyclo | //nolint:gocyclo | ||||||
| func Logger(l logger.Logger, opts ...LoggerOption) Option { | func Logger(l logger.Logger, opts ...LoggerOption) Option { | ||||||
| 	return func(o *Options) error { | 	return func(o *Options) error { | ||||||
| @@ -329,6 +330,7 @@ func Meters(m ...meter.Meter) Option { | |||||||
|  |  | ||||||
| // Register sets the register for the service | // Register sets the register for the service | ||||||
| // and the underlying components | // and the underlying components | ||||||
|  | // | ||||||
| //nolint:gocyclo | //nolint:gocyclo | ||||||
| func Register(r register.Register, opts ...RegisterOption) Option { | func Register(r register.Register, opts ...RegisterOption) Option { | ||||||
| 	return func(o *Options) error { | 	return func(o *Options) error { | ||||||
| @@ -403,6 +405,7 @@ func RegisterBroker(n string) RegisterOption { | |||||||
| } | } | ||||||
|  |  | ||||||
| // Tracer sets the tracer | // Tracer sets the tracer | ||||||
|  | // | ||||||
| //nolint:gocyclo | //nolint:gocyclo | ||||||
| func Tracer(t tracer.Tracer, opts ...TracerOption) Option { | func Tracer(t tracer.Tracer, opts ...TracerOption) Option { | ||||||
| 	return func(o *Options) error { | 	return func(o *Options) error { | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								options/hooks.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								options/hooks.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | package options // import "go.unistack.org/micro/v3/options" | ||||||
|  |  | ||||||
|  | // Hook func interface | ||||||
|  | type Hook interface{} | ||||||
|  |  | ||||||
|  | // Hooks func slice | ||||||
|  | type Hooks []Hook | ||||||
|  |  | ||||||
|  | // Append is used to add hooks | ||||||
|  | func (hs *Hooks) Append(h ...Hook) { | ||||||
|  | 	*hs = append(*hs, h...) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Replace is used to set hooks | ||||||
|  | func (hs *Hooks) Replace(h ...Hook) { | ||||||
|  | 	*hs = h | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // EachNext is used to itearate over hooks forward | ||||||
|  | func (hs *Hooks) EachNext(fn func(Hook)) { | ||||||
|  | 	for idx := 0; idx < len(*hs); idx++ { | ||||||
|  | 		fn((*hs)[idx]) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // EachPrev is used to iterate over hooks backward | ||||||
|  | func (hs *Hooks) EachPrev(fn func(Hook)) { | ||||||
|  | 	for idx := len(*hs) - 1; idx >= 0; idx-- { | ||||||
|  | 		fn((*hs)[idx]) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										65
									
								
								options/hooks_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								options/hooks_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | package options | ||||||
|  |  | ||||||
|  | import "testing" | ||||||
|  |  | ||||||
|  | func TestHooks_Append(t *testing.T) { | ||||||
|  | 	fn1 := func() {} | ||||||
|  | 	fn2 := func() {} | ||||||
|  | 	hs := &Hooks{} | ||||||
|  | 	hs.Append(fn1, fn2) | ||||||
|  | 	if len(*hs) != 2 { | ||||||
|  | 		t.Fatalf("unexpected Append error") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestHooks_Replace(t *testing.T) { | ||||||
|  | 	fn1 := func() {} | ||||||
|  | 	fn2 := func() {} | ||||||
|  | 	hs := &Hooks{} | ||||||
|  | 	hs.Append(fn1, fn2, fn1) | ||||||
|  | 	if len(*hs) != 3 { | ||||||
|  | 		t.Fatalf("unexpected Append error") | ||||||
|  | 	} | ||||||
|  | 	hs.Replace(fn1, fn2) | ||||||
|  | 	if len(*hs) != 2 { | ||||||
|  | 		t.Fatalf("unexpected Replace error") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestHooks_EachNext(t *testing.T) { | ||||||
|  | 	n := 5 | ||||||
|  | 	fn1 := func() { | ||||||
|  | 		n *= 2 | ||||||
|  | 	} | ||||||
|  | 	fn2 := func() { | ||||||
|  | 		n -= 10 | ||||||
|  | 	} | ||||||
|  | 	hs := &Hooks{} | ||||||
|  | 	hs.Append(fn1, fn2) | ||||||
|  |  | ||||||
|  | 	hs.EachNext(func(h Hook) { | ||||||
|  | 		h.(func())() | ||||||
|  | 	}) | ||||||
|  | 	if n != 0 { | ||||||
|  | 		t.Fatalf("unexpected EachNext") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestHooks_EachPrev(t *testing.T) { | ||||||
|  | 	n := 5 | ||||||
|  | 	fn1 := func() { | ||||||
|  | 		n *= 2 | ||||||
|  | 	} | ||||||
|  | 	fn2 := func() { | ||||||
|  | 		n -= 10 | ||||||
|  | 	} | ||||||
|  | 	hs := &Hooks{} | ||||||
|  | 	hs.Append(fn2, fn1) | ||||||
|  |  | ||||||
|  | 	hs.EachPrev(func(h Hook) { | ||||||
|  | 		h.(func())() | ||||||
|  | 	}) | ||||||
|  | 	if n != 0 { | ||||||
|  | 		t.Fatalf("unexpected EachPrev") | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -13,6 +13,7 @@ import ( | |||||||
| 	"go.unistack.org/micro/v3/metadata" | 	"go.unistack.org/micro/v3/metadata" | ||||||
| 	"go.unistack.org/micro/v3/meter" | 	"go.unistack.org/micro/v3/meter" | ||||||
| 	"go.unistack.org/micro/v3/network/transport" | 	"go.unistack.org/micro/v3/network/transport" | ||||||
|  | 	"go.unistack.org/micro/v3/options" | ||||||
| 	"go.unistack.org/micro/v3/register" | 	"go.unistack.org/micro/v3/register" | ||||||
| 	"go.unistack.org/micro/v3/tracer" | 	"go.unistack.org/micro/v3/tracer" | ||||||
| 	"go.unistack.org/micro/v3/util/id" | 	"go.unistack.org/micro/v3/util/id" | ||||||
| @@ -83,6 +84,8 @@ type Options struct { | |||||||
| 	MaxConn int | 	MaxConn int | ||||||
| 	// DeregisterAttempts holds the number of deregister attempts before error | 	// DeregisterAttempts holds the number of deregister attempts before error | ||||||
| 	DeregisterAttempts int | 	DeregisterAttempts int | ||||||
|  | 	// Hooks may contains SubscriberWrapper, HandlerWrapper or Server func wrapper | ||||||
|  | 	Hooks options.Hooks | ||||||
| } | } | ||||||
|  |  | ||||||
| // NewOptions returns new options struct with default or passed values | // NewOptions returns new options struct with default or passed values | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user