Set CallOptions as struct in Options. Can then be overridden easily during Call/Stream

This commit is contained in:
Asim
2016-04-05 18:07:07 +01:00
parent c462d7776c
commit 56c6993eb8
3 changed files with 176 additions and 35 deletions

View File

@@ -13,16 +13,21 @@ import (
)
type Options struct {
ContentType string
Broker broker.Broker
Codecs map[string]codec.NewCodec
Registry registry.Registry
Selector selector.Selector
Transport transport.Transport
Wrappers []Wrapper
Retries int
RequestTimeout time.Duration
DialTimeout time.Duration
// Used to select codec
ContentType string
// Plugged interfaces
Broker broker.Broker
Codecs map[string]codec.NewCodec
Registry registry.Registry
Selector selector.Selector
Transport transport.Transport
// Middleware for client
Wrappers []Wrapper
// Default Call Options
CallOptions CallOptions
// Other options for implementations of the interface
// can be stored in a context
@@ -32,6 +37,13 @@ type Options struct {
type CallOptions struct {
SelectOptions []selector.SelectOption
// Transport Dial Timeout
DialTimeout time.Duration
// Number of Call attempts
Retries int
// Request/Response timeout
RequestTimeout time.Duration
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
@@ -53,10 +65,12 @@ type RequestOptions struct {
func newOptions(options ...Option) Options {
opts := Options{
Codecs: make(map[string]codec.NewCodec),
Retries: DefaultRetries,
RequestTimeout: DefaultRequestTimeout,
DialTimeout: transport.DefaultDialTimeout,
Codecs: make(map[string]codec.NewCodec),
CallOptions: CallOptions{
Retries: DefaultRetries,
RequestTimeout: DefaultRequestTimeout,
DialTimeout: transport.DefaultDialTimeout,
},
}
for _, o := range options {
@@ -141,7 +155,7 @@ func Wrap(w Wrapper) Option {
// Should this be a Call Option?
func Retries(i int) Option {
return func(o *Options) {
o.Retries = i
o.CallOptions.Retries = i
}
}
@@ -149,14 +163,14 @@ func Retries(i int) Option {
// Should this be a Call Option?
func RequestTimeout(d time.Duration) Option {
return func(o *Options) {
o.RequestTimeout = d
o.CallOptions.RequestTimeout = d
}
}
// Transport dial timeout
func DialTimeout(d time.Duration) Option {
return func(o *Options) {
o.DialTimeout = d
o.CallOptions.DialTimeout = d
}
}
@@ -168,6 +182,30 @@ func WithSelectOption(so selector.SelectOption) CallOption {
}
}
// WithRetries is a CallOption which overrides that which
// set in Options.CallOptions
func WithRetries(i int) CallOption {
return func(o *CallOptions) {
o.Retries = i
}
}
// WithRequestTimeout is a CallOption which overrides that which
// set in Options.CallOptions
func WithRequestTimeout(d time.Duration) CallOption {
return func(o *CallOptions) {
o.RequestTimeout = d
}
}
// WithDialTimeout is a CallOption which overrides that which
// set in Options.CallOptions
func WithDialTimeout(d time.Duration) CallOption {
return func(o *CallOptions) {
o.DialTimeout = d
}
}
// Request Options
func StreamingRequest() RequestOption {