github.com/grahambrereton-form3/tilt@v0.10.18/internal/tiltfile/value/string.go (about) 1 package value 2 3 import "go.starlark.net/starlark" 4 5 type ImplicitStringer interface { 6 ImplicitString() string 7 } 8 9 // Wrapper around starlark.AsString 10 func AsString(x starlark.Value) (string, bool) { 11 is, ok := x.(ImplicitStringer) 12 if ok { 13 return is.ImplicitString(), true 14 } 15 return starlark.AsString(x) 16 } 17 18 // Unpack an argument that can either be expressed as 19 // a string or as a list of strings. 20 func AsStringOrStringList(x starlark.Value) ([]string, bool) { 21 if x == nil { 22 return []string{}, true 23 } 24 25 s, ok := AsString(x) 26 if ok { 27 return []string{s}, true 28 } 29 30 iterable, ok := x.(starlark.Iterable) 31 if ok { 32 result := []string{} 33 iter := iterable.Iterate() 34 defer iter.Done() 35 var item starlark.Value 36 for iter.Next(&item) { 37 s, ok := AsString(item) 38 if !ok { 39 return nil, false 40 } 41 result = append(result, s) 42 } 43 return result, true 44 } 45 46 return nil, false 47 }