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
|
||||||
|
Loading…
Reference in New Issue
Block a user