github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/config/string_list.go (about)

     1  package config
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	flag "github.com/spf13/pflag"
     8  	"go.starlark.net/starlark"
     9  
    10  	"github.com/tilt-dev/tilt/internal/tiltfile/value"
    11  )
    12  
    13  type stringList struct {
    14  	Values []string
    15  	isSet  bool
    16  }
    17  
    18  var _ configValue = &stringList{}
    19  var _ flag.Value = &stringList{}
    20  
    21  func (s *stringList) starlark() starlark.Value {
    22  	return value.StringSliceToList(s.Values)
    23  }
    24  
    25  func (s *stringList) IsSet() bool {
    26  	return s.isSet
    27  }
    28  
    29  func (s *stringList) Type() string {
    30  	return "list[string]"
    31  }
    32  
    33  func (s *stringList) setFromInterface(i interface{}) error {
    34  	if i == nil {
    35  		s.Values = nil
    36  		return nil
    37  	}
    38  	is, ok := i.([]interface{})
    39  	if !ok {
    40  		return fmt.Errorf("expected array")
    41  	}
    42  	s.Values = nil
    43  	for _, elem := range is {
    44  		str, ok := elem.(string)
    45  		if !ok {
    46  			return fmt.Errorf("expected string, got %T", elem)
    47  		}
    48  		s.Values = append(s.Values, str)
    49  	}
    50  
    51  	s.isSet = true
    52  	return nil
    53  }
    54  
    55  func (s *stringList) Set(v string) error {
    56  	s.Values = append(s.Values, v)
    57  	s.isSet = true
    58  	return nil
    59  }
    60  
    61  func (s *stringList) String() string {
    62  	return strings.Join(s.Values, ",")
    63  }