github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/mflagext/listvar.go (about)

     1  package mflagext
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/weaveworks/common/mflag"
     7  )
     8  
     9  type listOpts struct {
    10  	value      *[]string
    11  	hasBeenSet bool
    12  }
    13  
    14  // ListVar creates an mflag.Var for repeated flags.
    15  func ListVar(p *[]string, names []string, value []string, usage string) {
    16  	*p = value
    17  	mflag.Var(&listOpts{p, false}, names, usage)
    18  }
    19  
    20  // Set implements mflag.Var
    21  func (opts *listOpts) Set(value string) error {
    22  	if opts.hasBeenSet {
    23  		(*opts.value) = append((*opts.value), value)
    24  	} else {
    25  		(*opts.value) = []string{value}
    26  		opts.hasBeenSet = true
    27  	}
    28  	return nil
    29  }
    30  
    31  // String implements mflag.Var
    32  func (opts *listOpts) String() string {
    33  	return fmt.Sprintf("%v", []string(*opts.value))
    34  }