update interface
This commit is contained in:
		| @@ -1,44 +1,41 @@ | ||||
| package init | ||||
|  | ||||
| type defaultInit struct { | ||||
| 	opts *Options | ||||
| type defaultOptions struct { | ||||
| 	opts *Values | ||||
| } | ||||
|  | ||||
| type stringKey struct{} | ||||
|  | ||||
| func (i *defaultInit) Init(opts ...Option) error { | ||||
| 	if i.opts == nil { | ||||
| 		i.opts = new(Options) | ||||
| func (d *defaultOptions) Init(opts ...Option) error { | ||||
| 	if d.opts == nil { | ||||
| 		d.opts = new(Values) | ||||
| 	} | ||||
| 	for _, o := range opts { | ||||
| 		if err := i.opts.SetOption(o); err != nil { | ||||
| 		if err := d.opts.Option(o); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (i *defaultInit) Options() *Options { | ||||
| 	if i.opts == nil { | ||||
| 		i.opts = new(Options) | ||||
| 	} | ||||
| 	return i.opts | ||||
| func (d *defaultOptions) Options() Options { | ||||
| 	return d | ||||
| } | ||||
|  | ||||
| func (i *defaultInit) Value(k interface{}) (interface{}, bool) { | ||||
| 	if i.opts == nil { | ||||
| 		i.opts = new(Options) | ||||
| func (d *defaultOptions) Value(k interface{}) (interface{}, bool) { | ||||
| 	if d.opts == nil { | ||||
| 		d.opts = new(Values) | ||||
| 	} | ||||
| 	return i.opts.Value(k) | ||||
| 	return d.opts.Get(k) | ||||
| } | ||||
|  | ||||
| func (i *defaultInit) String() string { | ||||
| 	if i.opts == nil { | ||||
| 		i.opts = new(Options) | ||||
| func (d *defaultOptions) String() string { | ||||
| 	if d.opts == nil { | ||||
| 		d.opts = new(Values) | ||||
| 	} | ||||
| 	n, ok := i.opts.Value(stringKey{}) | ||||
| 	n, ok := d.opts.Get(stringKey{}) | ||||
| 	if ok { | ||||
| 		return n.(string) | ||||
| 	} | ||||
| 	return "defaultInit" | ||||
| 	return "Values" | ||||
| } | ||||
|   | ||||
							
								
								
									
										16
									
								
								init/init.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								init/init.go
									
									
									
									
									
								
							| @@ -1,21 +1,21 @@ | ||||
| // Package init is an interface for initialising options | ||||
| package init | ||||
|  | ||||
| // Init is used for initialisation | ||||
| type Init interface { | ||||
| // Options is used for initialisation | ||||
| type Options interface { | ||||
| 	// Initialise options | ||||
| 	Init(...Option) error | ||||
| 	// Options returns the current options | ||||
| 	Options() *Options | ||||
| 	Options() Options | ||||
| 	// Value returns an option value | ||||
| 	Value(k interface{}) (interface{}, bool) | ||||
| 	// The name for who these options exist | ||||
| 	String() string | ||||
| } | ||||
|  | ||||
| // NewInit returns a new initialiser | ||||
| func NewInit(opts ...Option) Init { | ||||
| 	i := new(defaultInit) | ||||
| 	i.Init(opts...) | ||||
| 	return i | ||||
| // NewOptions returns a new initialiser | ||||
| func NewOptions(opts ...Option) Options { | ||||
| 	o := new(defaultOptions) | ||||
| 	o.Init(opts...) | ||||
| 	return o | ||||
| } | ||||
|   | ||||
| @@ -4,17 +4,17 @@ import ( | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| // Options holds the set of option values and protects them | ||||
| type Options struct { | ||||
| // Values holds the set of option values and protects them | ||||
| type Values struct { | ||||
| 	sync.RWMutex | ||||
| 	values map[interface{}]interface{} | ||||
| } | ||||
|  | ||||
| // Option gives access to options | ||||
| type Option func(o *Options) error | ||||
| type Option func(o *Values) error | ||||
|  | ||||
| // Get a value from options | ||||
| func (o *Options) Value(k interface{}) (interface{}, bool) { | ||||
| func (o *Values) Get(k interface{}) (interface{}, bool) { | ||||
| 	o.RLock() | ||||
| 	defer o.RUnlock() | ||||
| 	v, ok := o.values[k] | ||||
| @@ -22,7 +22,7 @@ func (o *Options) Value(k interface{}) (interface{}, bool) { | ||||
| } | ||||
|  | ||||
| // Set a value in the options | ||||
| func (o *Options) SetValue(k, v interface{}) error { | ||||
| func (o *Values) Set(k, v interface{}) error { | ||||
| 	o.Lock() | ||||
| 	defer o.Unlock() | ||||
| 	if o.values == nil { | ||||
| @@ -33,14 +33,14 @@ func (o *Options) SetValue(k, v interface{}) error { | ||||
| } | ||||
|  | ||||
| // SetOption executes an option | ||||
| func (o *Options) SetOption(op Option) error { | ||||
| func (o *Values) Option(op Option) error { | ||||
| 	return op(o) | ||||
| } | ||||
|  | ||||
| // WithValue allows you to set any value within the options | ||||
| func WithValue(k, v interface{}) Option { | ||||
| 	return func(o *Options) error { | ||||
| 		return o.SetValue(k, v) | ||||
| 	return func(o *Values) error { | ||||
| 		return o.Set(k, v) | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user