github.com/tappoz/packer@v1.0.0-rc1/helper/enumflag/flag.go (about)

     1  package enumflag
     2  
     3  import "fmt"
     4  
     5  type enumFlag struct {
     6  	target  *string
     7  	options []string
     8  }
     9  
    10  // New returns a flag.Value implementation for parsing flags with a one-of-a-set value
    11  func New(target *string, options ...string) *enumFlag {
    12  	return &enumFlag{target: target, options: options}
    13  }
    14  
    15  func (f *enumFlag) String() string {
    16  	return *f.target
    17  }
    18  
    19  func (f *enumFlag) Set(value string) error {
    20  	for _, v := range f.options {
    21  		if v == value {
    22  			*f.target = value
    23  			return nil
    24  		}
    25  	}
    26  
    27  	return fmt.Errorf("expected one of %q", f.options)
    28  }