github.com/hashicorp/packer@v1.14.3/command/enumflag/flag.go (about)

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