47 lines
		
	
	
		
			989 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			989 B
		
	
	
	
		
			Go
		
	
	
	
| package validate
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // Honors cobra.Value interface
 | |
| type ChoiceValue struct {
 | |
| 	value   *string
 | |
| 	choices []string
 | |
| }
 | |
| 
 | |
| // Value may be used in cobra FlagSet methods Var/VarP/VarPF() to select from a set of values
 | |
| //
 | |
| // Example:
 | |
| // 	created := validate.ChoiceValue(&opts.Sort, "command", "created", "id", "image", "names", "runningfor", "size", "status")
 | |
| //	flags.Var(created, "sort", "Sort output by: "+created.Choices())
 | |
| func Value(p *string, choices ...string) *ChoiceValue {
 | |
| 	return &ChoiceValue{
 | |
| 		value:   p,
 | |
| 		choices: choices,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *ChoiceValue) String() string {
 | |
| 	return *c.value
 | |
| }
 | |
| 
 | |
| func (c *ChoiceValue) Set(value string) error {
 | |
| 	for _, v := range c.choices {
 | |
| 		if v == value {
 | |
| 			*c.value = value
 | |
| 			return nil
 | |
| 		}
 | |
| 	}
 | |
| 	return fmt.Errorf("%q is not a valid value.  Choose from: %q", value, c.Choices())
 | |
| }
 | |
| 
 | |
| func (c *ChoiceValue) Choices() string {
 | |
| 	return strings.Join(c.choices, ", ")
 | |
| }
 | |
| 
 | |
| func (c *ChoiceValue) Type() string {
 | |
| 	return "choice"
 | |
| }
 |