func RequestTimeout(d time.Duration) Option {
	return func(o *Options) {
		o.CallOptions.RequestTimeout = d
	}
}
The request timeout.
Should this be a Call Option?
package client
import (
	"context"
	"time"
	"github.com/micro/micro/v3/service/broker"
	"github.com/micro/micro/v3/service/broker/memory"
	"github.com/micro/micro/v3/service/network/transport"
	thttp "github.com/micro/micro/v3/service/network/transport/http"
	"github.com/micro/micro/v3/service/registry"
	"github.com/micro/micro/v3/service/router"
	regRouter "github.com/micro/micro/v3/service/router/registry"
	"github.com/micro/micro/v3/util/codec"
	"github.com/micro/micro/v3/util/selector"
	"github.com/micro/micro/v3/util/selector/roundrobin"
)
type Options struct {
	ContentType string
	Proxy string
	Broker    broker.Broker
	Codecs    map[string]codec.NewCodec
	Router    router.Router
	Selector  selector.Selector
	Transport transport.Transport
	Lookup LookupFunc
	PoolSize int
	PoolTTL  time.Duration
	Wrappers []Wrapper
	CallOptions CallOptions
	Context context.Context
}
type CallOptions struct {
	Address []string
	Backoff BackoffFunc
	DialTimeout time.Duration
	Retries int
	Retry RetryFunc
	RequestTimeout time.Duration
	Router router.Router
	Selector selector.Selector
	SelectOptions []selector.SelectOption
	StreamTimeout time.Duration
	AuthToken bool
	Network string
	CallWrappers []CallWrapper
	Context context.Context
}
type PublishOptions struct {
	Exchange string
	Context context.Context
}
type MessageOptions struct {
	ContentType string
}
type RequestOptions struct {
	ContentType string
	Stream      bool
	Context context.Context
}
func NewOptions(options ...Option) Options {
	opts := Options{
		Context:     context.Background(),
		ContentType: "application/protobuf",
		Codecs:      make(map[string]codec.NewCodec),
		CallOptions: CallOptions{
			Backoff:        DefaultBackoff,
			Retry:          DefaultRetry,
			Retries:        DefaultRetries,
			RequestTimeout: DefaultRequestTimeout,
			DialTimeout:    transport.DefaultDialTimeout,
		},
		Lookup:    LookupRoute,
		PoolSize:  DefaultPoolSize,
		PoolTTL:   DefaultPoolTTL,
		Broker:    memory.NewBroker(),
		Router:    regRouter.NewRouter(),
		Selector:  roundrobin.NewSelector(),
		Transport: thttp.NewTransport(),
	}
	for _, o := range options {
		o(&opts)
	}
	return opts
}
func Broker(b broker.Broker) Option {
	return func(o *Options) {
		o.Broker = b
	}
}
func Codec(contentType string, c codec.NewCodec) Option {
	return func(o *Options) {
		o.Codecs[contentType] = c
	}
}
func ContentType(ct string) Option {
	return func(o *Options) {
		o.ContentType = ct
	}
}
func Proxy(addr string) Option {
	return func(o *Options) {
		o.Proxy = addr
	}
}
func PoolSize(d int) Option {
	return func(o *Options) {
		o.PoolSize = d
	}
}
func PoolTTL(d time.Duration) Option {
	return func(o *Options) {
		o.PoolTTL = d
	}
}
func Transport(t transport.Transport) Option {
	return func(o *Options) {
		o.Transport = t
	}
}
func Registry(r registry.Registry) Option {
	return func(o *Options) {
		o.Router.Init(router.Registry(r))
	}
}
func Router(r router.Router) Option {
	return func(o *Options) {
		o.Router = r
	}
}
func Selector(s selector.Selector) Option {
	return func(o *Options) {
		o.Selector = s
	}
}
func Wrap(w Wrapper) Option {
	return func(o *Options) {
		o.Wrappers = append(o.Wrappers, w)
	}
}
func WrapCall(cw ...CallWrapper) Option {
	return func(o *Options) {
		o.CallOptions.CallWrappers = append(o.CallOptions.CallWrappers, cw...)
	}
}
func Backoff(fn BackoffFunc) Option {
	return func(o *Options) {
		o.CallOptions.Backoff = fn
	}
}
func Lookup(l LookupFunc) Option {
	return func(o *Options) {
		o.Lookup = l
	}
}
func Retries(i int) Option {
	return func(o *Options) {
		o.CallOptions.Retries = i
	}
}
func Retry(fn RetryFunc) Option {
	return func(o *Options) {
		o.CallOptions.Retry = fn
	}
}