138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cmd
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/micro/go-micro/broker"
 | |
| 	"github.com/micro/go-micro/client"
 | |
| 	"github.com/micro/go-micro/registry"
 | |
| 	"github.com/micro/go-micro/selector"
 | |
| 	"github.com/micro/go-micro/server"
 | |
| 	"github.com/micro/go-micro/transport"
 | |
| )
 | |
| 
 | |
| type Options struct {
 | |
| 	// For the Command Line itself
 | |
| 	Name        string
 | |
| 	Description string
 | |
| 	Version     string
 | |
| 
 | |
| 	// 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
 | |
| 
 | |
| 	Brokers    map[string]func(...broker.Option) broker.Broker
 | |
| 	Clients    map[string]func(...client.Option) client.Client
 | |
| 	Registries map[string]func(...registry.Option) registry.Registry
 | |
| 	Selectors  map[string]func(...selector.Option) selector.Selector
 | |
| 	Servers    map[string]func(...server.Option) server.Server
 | |
| 	Transports map[string]func(...transport.Option) transport.Transport
 | |
| 
 | |
| 	// Other options for implementations of the interface
 | |
| 	// can be stored in a context
 | |
| 	Context context.Context
 | |
| }
 | |
| 
 | |
| // Command line Name
 | |
| func Name(n string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Name = n
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Command line Description
 | |
| func Description(d string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Description = d
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Command line Version
 | |
| func Version(v string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Version = v
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 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
 | |
| func NewBroker(name string, b func(...broker.Option) broker.Broker) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Brokers[name] = b
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // New client func
 | |
| func NewClient(name string, b func(...client.Option) client.Client) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Clients[name] = b
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // New registry func
 | |
| func NewRegistry(name string, r func(...registry.Option) registry.Registry) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Registries[name] = r
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // New selector func
 | |
| func NewSelector(name string, s func(...selector.Option) selector.Selector) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Selectors[name] = s
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // New server func
 | |
| func NewServer(name string, s func(...server.Option) server.Server) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Servers[name] = s
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // New transport func
 | |
| func NewTransport(name string, t func(...transport.Option) transport.Transport) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Transports[name] = t
 | |
| 	}
 | |
| }
 |