| package opts |
| |
| import ( |
| "errors" |
| "fmt" |
| "strconv" |
| "strings" |
| |
| "github.com/docker/docker/opts" |
| ) |
| |
| // SetOpts holds a map of values and a validation function. |
| type SetOpts struct { |
| values map[string]bool |
| } |
| |
| // Set validates if needed the input value and add it to the |
| // internal map, by splitting on '='. |
| func (opts *SetOpts) Set(value string) error { |
| k, v, found := strings.Cut(value, "=") |
| if k == "" { |
| return errors.New("invalid option name: " + value) |
| } |
| var isSet bool |
| if !found { |
| isSet = true |
| } else { |
| var err error |
| isSet, err = strconv.ParseBool(v) |
| if err != nil { |
| return err |
| } |
| } |
| opts.values[k] = isSet |
| return nil |
| } |
| |
| // GetAll returns the values of SetOpts as a map. |
| func (opts *SetOpts) GetAll() map[string]bool { |
| return opts.values |
| } |
| |
| func (opts *SetOpts) String() string { |
| return fmt.Sprintf("%v", opts.values) |
| } |
| |
| // Type returns a string name for this Option type |
| func (opts *SetOpts) Type() string { |
| return "map" |
| } |
| |
| // NewSetOpts creates a new SetOpts with the specified set of values as a map of string to bool. |
| func NewSetOpts(values map[string]bool) *SetOpts { |
| if values == nil { |
| values = make(map[string]bool) |
| } |
| return &SetOpts{ |
| values: values, |
| } |
| } |
| |
| // NamedSetOpts is a SetOpts struct with a configuration name. |
| // This struct is useful to keep reference to the assigned |
| // field name in the internal configuration struct. |
| type NamedSetOpts struct { |
| SetOpts |
| name string |
| } |
| |
| var _ opts.NamedOption = &NamedSetOpts{} |
| |
| // NewNamedSetOpts creates a reference to a new NamedSetOpts struct. |
| func NewNamedSetOpts(name string, values map[string]bool) *NamedSetOpts { |
| return &NamedSetOpts{ |
| SetOpts: *NewSetOpts(values), |
| name: name, |
| } |
| } |
| |
| // Name returns the name of the NamedSetOpts in the configuration. |
| func (o *NamedSetOpts) Name() string { |
| return o.name |
| } |