github.com/annwntech/go-micro/v2@v2.9.5/config/reader/options.go (about)

     1  package reader
     2  
     3  import (
     4  	"github.com/annwntech/go-micro/v2/config/encoder"
     5  	"github.com/annwntech/go-micro/v2/config/encoder/hcl"
     6  	"github.com/annwntech/go-micro/v2/config/encoder/json"
     7  	"github.com/annwntech/go-micro/v2/config/encoder/toml"
     8  	"github.com/annwntech/go-micro/v2/config/encoder/xml"
     9  	"github.com/annwntech/go-micro/v2/config/encoder/yaml"
    10  )
    11  
    12  type Options struct {
    13  	Encoding map[string]encoder.Encoder
    14  }
    15  
    16  type Option func(o *Options)
    17  
    18  func NewOptions(opts ...Option) Options {
    19  	options := Options{
    20  		Encoding: map[string]encoder.Encoder{
    21  			"json": json.NewEncoder(),
    22  			"yaml": yaml.NewEncoder(),
    23  			"toml": toml.NewEncoder(),
    24  			"xml":  xml.NewEncoder(),
    25  			"hcl":  hcl.NewEncoder(),
    26  			"yml":  yaml.NewEncoder(),
    27  		},
    28  	}
    29  	for _, o := range opts {
    30  		o(&options)
    31  	}
    32  	return options
    33  }
    34  
    35  func WithEncoder(e encoder.Encoder) Option {
    36  	return func(o *Options) {
    37  		if o.Encoding == nil {
    38  			o.Encoding = make(map[string]encoder.Encoder)
    39  		}
    40  		o.Encoding[e.String()] = e
    41  	}
    42  }