gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/api/router/options.go (about)

     1  package router
     2  
     3  import (
     4  	"gitee.com/liuxuezhan/go-micro-v1.18.0/api/resolver"
     5  	"gitee.com/liuxuezhan/go-micro-v1.18.0/api/resolver/micro"
     6  	"gitee.com/liuxuezhan/go-micro-v1.18.0/config/cmd"
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/registry"
     8  )
     9  
    10  type Options struct {
    11  	Namespace string
    12  	Handler   string
    13  	Registry  registry.Registry
    14  	Resolver  resolver.Resolver
    15  }
    16  
    17  type Option func(o *Options)
    18  
    19  func NewOptions(opts ...Option) Options {
    20  	options := Options{
    21  		Handler:  "meta",
    22  		Registry: *cmd.DefaultOptions().Registry,
    23  	}
    24  
    25  	for _, o := range opts {
    26  		o(&options)
    27  	}
    28  
    29  	if options.Resolver == nil {
    30  		options.Resolver = micro.NewResolver(
    31  			resolver.WithHandler(options.Handler),
    32  			resolver.WithNamespace(options.Namespace),
    33  		)
    34  	}
    35  
    36  	return options
    37  }
    38  
    39  func WithHandler(h string) Option {
    40  	return func(o *Options) {
    41  		o.Handler = h
    42  	}
    43  }
    44  
    45  func WithNamespace(ns string) Option {
    46  	return func(o *Options) {
    47  		o.Namespace = ns
    48  	}
    49  }
    50  
    51  func WithRegistry(r registry.Registry) Option {
    52  	return func(o *Options) {
    53  		o.Registry = r
    54  	}
    55  }
    56  
    57  func WithResolver(r resolver.Resolver) Option {
    58  	return func(o *Options) {
    59  		o.Resolver = r
    60  	}
    61  }