code: func NewOptionList(permissibleOptions []string, defaultOptions string) (*OptionList, error) {
  	permissible := make(map[string]struct{})
  	ol := &OptionList{
  		allOptions:  permissibleOptions,
  		permissible: permissible,
  		typeName:    "OptionList",
  	}
  
  	for _, o := range permissibleOptions {
  		ol.permissible[o] = struct{}{}
  	}
  
  	if err := ol.Set(defaultOptions); err != nil {
  		return nil, errwrap.Wrap(errors.New("problem setting defaults"), err)
  	}
  
  	return ol, nil
  }
docs: // NewOptionList initializes an OptionList. PermissibleOptions is the complete
  // set of allowable options. It will set all options specified in defaultOptions
  // as provided; they will all be cleared if this flag is passed in the CLI