pkg/datasource/consul/option.go (71 lines of code) (raw):

package consul import ( "time" "github.com/alibaba/sentinel-golang/ext/datasource" "github.com/hashicorp/consul/api" ) type ( options struct { consulConfig *api.Config consulClient *api.Client propertyHandlers []datasource.PropertyHandler // queryOptions is the options for KVQuerier queryOptions *api.QueryOptions } Option func(*options) KVQuerier interface { Get(key string, q *api.QueryOptions) (*api.KVPair, *api.QueryMeta, error) List(prefix string, q *api.QueryOptions) (api.KVPairs, *api.QueryMeta, error) } ) // WithQueryOptions sets options for consulClient.Get method func WithQueryOptions(queryOptions *api.QueryOptions) Option { return func(opts *options) { opts.queryOptions = queryOptions } } // WithConsulConfig injects consul client config func WithConsulConfig(config *api.Config) Option { return func(opts *options) { opts.consulConfig = config } } // WithConsulClient injects consul client instance func WithConsulClient(client *api.Client) Option { return func(opts *options) { opts.consulClient = client } } // WithPropertyHandlers injects property handlers func WithPropertyHandlers(handlers ...datasource.PropertyHandler) Option { return func(opts *options) { if opts.propertyHandlers == nil { opts.propertyHandlers = make([]datasource.PropertyHandler, 0) } opts.propertyHandlers = append(opts.propertyHandlers, handlers...) } } func evaluateOptions(opts []Option) *options { var optCopy = &options{ propertyHandlers: make([]datasource.PropertyHandler, 0), // default query options queryOptions: defaultQueryOptions(), } for _, o := range opts { o(optCopy) } return optCopy } func defaultQueryOptions() *api.QueryOptions { return &api.QueryOptions{ Datacenter: "", AllowStale: false, RequireConsistent: false, UseCache: false, MaxAge: 0, StaleIfError: 0, WaitIndex: 0, WaitHash: "", WaitTime: time.Minute * 5, // block request Token: "", Near: "", NodeMeta: nil, RelayFactor: 0, Connect: false, Filter: "", } }