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 }