micro/cmd/options.go

122 lines
2.5 KiB
Go
Raw Normal View History

2016-01-01 04:16:21 +03:00
package cmd
import (
"github.com/micro/go-micro/broker"
2016-01-02 03:38:57 +03:00
"github.com/micro/go-micro/client"
2016-01-01 04:16:21 +03:00
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/selector"
2016-01-02 03:38:57 +03:00
"github.com/micro/go-micro/server"
2016-01-01 04:16:21 +03:00
"github.com/micro/go-micro/transport"
"golang.org/x/net/context"
2016-01-01 04:16:21 +03:00
)
type Options struct {
2016-01-02 03:38:57 +03:00
// For the Command Line itself
2016-01-01 04:16:21 +03:00
Name string
Description string
Version string
2016-01-02 03:38:57 +03:00
// We need pointers to things so we can swap them out if needed.
Broker *broker.Broker
Registry *registry.Registry
Selector *selector.Selector
Transport *transport.Transport
Client *client.Client
Server *server.Server
2016-03-16 01:12:28 +03:00
Brokers map[string]func(...broker.Option) broker.Broker
2016-03-16 01:20:21 +03:00
Registries map[string]func(...registry.Option) registry.Registry
2016-01-01 04:16:21 +03:00
Selectors map[string]func(...selector.Option) selector.Selector
2016-03-16 01:25:32 +03:00
Transports map[string]func(...transport.Option) transport.Transport
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
2016-01-01 04:16:21 +03:00
}
2016-01-02 03:38:57 +03:00
// Command line Name
2016-01-01 04:16:21 +03:00
func Name(n string) Option {
return func(o *Options) {
o.Name = n
}
}
2016-01-02 03:38:57 +03:00
// Command line Description
2016-01-01 04:16:21 +03:00
func Description(d string) Option {
return func(o *Options) {
o.Description = d
}
}
2016-01-02 03:38:57 +03:00
// Command line Version
2016-01-01 04:16:21 +03:00
func Version(v string) Option {
return func(o *Options) {
o.Version = v
}
}
2016-01-02 03:38:57 +03:00
func Broker(b *broker.Broker) Option {
return func(o *Options) {
o.Broker = b
}
}
func Selector(s *selector.Selector) Option {
return func(o *Options) {
o.Selector = s
}
}
func Registry(r *registry.Registry) Option {
return func(o *Options) {
o.Registry = r
}
}
func Transport(t *transport.Transport) Option {
return func(o *Options) {
o.Transport = t
}
}
func Client(c *client.Client) Option {
return func(o *Options) {
o.Client = c
}
}
func Server(s *server.Server) Option {
return func(o *Options) {
o.Server = s
}
}
// New broker func
2016-03-16 01:12:28 +03:00
func NewBroker(name string, b func(...broker.Option) broker.Broker) Option {
2016-01-01 04:16:21 +03:00
return func(o *Options) {
o.Brokers[name] = b
}
}
2016-01-02 03:38:57 +03:00
// New registry func
2016-03-16 01:20:21 +03:00
func NewRegistry(name string, r func(...registry.Option) registry.Registry) Option {
2016-01-01 04:16:21 +03:00
return func(o *Options) {
o.Registries[name] = r
}
}
2016-01-02 03:38:57 +03:00
// New selector func
func NewSelector(name string, s func(...selector.Option) selector.Selector) Option {
2016-01-01 04:16:21 +03:00
return func(o *Options) {
o.Selectors[name] = s
}
}
2016-01-02 03:38:57 +03:00
// New transport func
2016-03-16 01:25:32 +03:00
func NewTransport(name string, t func(...transport.Option) transport.Transport) Option {
2016-01-01 04:16:21 +03:00
return func(o *Options) {
o.Transports[name] = t
}
}