delete options (#1333)

This commit is contained in:
Asim Aslam 2020-03-12 09:05:09 +00:00 committed by GitHub
parent 1ca4619506
commit be9c6141f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 0 additions and 110 deletions

View File

@ -1,34 +0,0 @@
package options
type defaultOptions struct {
opts *Values
}
type stringKey struct{}
func (d *defaultOptions) Init(opts ...Option) error {
if d.opts == nil {
d.opts = new(Values)
}
for _, o := range opts {
if err := d.opts.Option(o); err != nil {
return err
}
}
return nil
}
func (d *defaultOptions) Values() *Values {
return d.opts
}
func (d *defaultOptions) String() string {
if d.opts == nil {
d.opts = new(Values)
}
n, ok := d.opts.Get(stringKey{})
if ok {
return n.(string)
}
return "Values"
}

View File

@ -1,76 +0,0 @@
// Package options provides a way to initialise options
package options
import (
"log"
"sync"
)
// Options is used for initialisation
type Options interface {
// Initialise options
Init(...Option) error
// Options returns the current options
Values() *Values
// The name for who these options exist
String() string
}
// 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 *Values) error
// Get a value from options
func (o *Values) Get(k interface{}) (interface{}, bool) {
o.RLock()
defer o.RUnlock()
v, ok := o.values[k]
return v, ok
}
// Set a value in the options
func (o *Values) Set(k, v interface{}) error {
o.Lock()
defer o.Unlock()
if o.values == nil {
o.values = map[interface{}]interface{}{}
}
o.values[k] = v
return nil
}
// SetOption executes an option
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 *Values) error {
return o.Set(k, v)
}
}
// WithOption gives you the ability to create an option that accesses values
func WithOption(o Option) Option {
return o
}
// String sets the string
func WithString(s string) Option {
return WithValue(stringKey{}, s)
}
// NewOptions returns a new initialiser
func NewOptions(opts ...Option) Options {
o := new(defaultOptions)
if err := o.Init(opts...); err != nil {
log.Fatal(err)
}
return o
}