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  }