func Runtime(r runtime.Runtime) Option {
	return func(o *Options) {
		o.Runtime = r
	}
}
Runtime sets the runtime
package micro
import (
	"context"
	"time"
	"go-micro.dev/v4/auth"
	"go-micro.dev/v4/broker"
	"go-micro.dev/v4/cache"
	"go-micro.dev/v4/client"
	"go-micro.dev/v4/cmd"
	"go-micro.dev/v4/config"
	"go-micro.dev/v4/debug/profile"
	"go-micro.dev/v4/debug/trace"
	"go-micro.dev/v4/registry"
	"go-micro.dev/v4/runtime"
	"go-micro.dev/v4/selector"
	"go-micro.dev/v4/server"
	"go-micro.dev/v4/store"
	"go-micro.dev/v4/transport"
	"github.com/urfave/cli/v2"
)
type Options struct {
	Auth      auth.Auth
	Broker    broker.Broker
	Cache     cache.Cache
	Cmd       cmd.Cmd
	Config    config.Config
	Client    client.Client
	Server    server.Server
	Store     store.Store
	Registry  registry.Registry
	Runtime   runtime.Runtime
	Transport transport.Transport
	Profile   profile.Profile
	BeforeStart []func() error
	BeforeStop  []func() error
	AfterStart  []func() error
	AfterStop   []func() error
	Context context.Context
	Signal bool
}
func newOptions(opts ...Option) Options {
	opt := Options{
		Auth:      auth.DefaultAuth,
		Broker:    broker.DefaultBroker,
		Cache:     cache.DefaultCache,
		Cmd:       cmd.DefaultCmd,
		Config:    config.DefaultConfig,
		Client:    client.DefaultClient,
		Server:    server.DefaultServer,
		Store:     store.DefaultStore,
		Registry:  registry.DefaultRegistry,
		Runtime:   runtime.DefaultRuntime,
		Transport: transport.DefaultTransport,
		Context:   context.Background(),
		Signal:    true,
	}
	for _, o := range opts {
		o(&opt)
	}
	return opt
}
func Broker(b broker.Broker) Option {
	return func(o *Options) {
		o.Broker = b
		o.Client.Init(client.Broker(b))
		o.Server.Init(server.Broker(b))
	}
}
func Cache(c cache.Cache) Option {
	return func(o *Options) {
		o.Cache = c
	}
}
func Cmd(c cmd.Cmd) Option {
	return func(o *Options) {
		o.Cmd = c
	}
}
func Client(c client.Client) Option {
	return func(o *Options) {
		o.Client = c
	}
}
func Context(ctx context.Context) Option {
	return func(o *Options) {
		o.Context = ctx
	}
}
func HandleSignal(b bool) Option {
	return func(o *Options) {
		o.Signal = b
	}
}
func Profile(p profile.Profile) Option {
	return func(o *Options) {
		o.Profile = p
	}
}
func Server(s server.Server) Option {
	return func(o *Options) {
		o.Server = s
	}
}
func Store(s store.Store) Option {
	return func(o *Options) {
		o.Store = s
	}
}
func Registry(r registry.Registry) Option {
	return func(o *Options) {
		o.Registry = r
		o.Client.Init(client.Registry(r))
		o.Server.Init(server.Registry(r))
		o.Broker.Init(broker.Registry(r))
	}
}
func Tracer(t trace.Tracer) Option {
	return func(o *Options) {
		o.Server.Init(server.Tracer(t))
	}
}
func Auth(a auth.Auth) Option {
	return func(o *Options) {
		o.Auth = a
	}
}
func Config(c config.Config) Option {
	return func(o *Options) {
		o.Config = c
	}
}
func Selector(s selector.Selector) Option {
	return func(o *Options) {
		o.Client.Init(client.Selector(s))
	}
}
func Transport(t transport.Transport) Option {
	return func(o *Options) {
		o.Transport = t
		o.Client.Init(client.Transport(t))
		o.Server.Init(server.Transport(t))
	}
}