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

     1  package value
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"go.starlark.net/starlark"
     7  )
     8  
     9  type StringStringMap map[string]string
    10  
    11  var _ starlark.Unpacker = &StringStringMap{}
    12  
    13  func (s *StringStringMap) Unpack(v starlark.Value) error {
    14  	*s = make(map[string]string)
    15  	if v != nil && v != starlark.None {
    16  		d, ok := v.(*starlark.Dict)
    17  		if !ok {
    18  			return fmt.Errorf("expected dict, got %T", v)
    19  		}
    20  
    21  		for _, tuple := range d.Items() {
    22  			k, ok := AsString(tuple[0])
    23  			if !ok {
    24  				return fmt.Errorf("key is not a string: %T (%v)", tuple[0], tuple[0])
    25  			}
    26  
    27  			v, ok := AsString(tuple[1])
    28  			if !ok {
    29  				return fmt.Errorf("value is not a string: %T (%v)", tuple[1], tuple[1])
    30  			}
    31  
    32  			(*s)[k] = v
    33  		}
    34  	}
    35  
    36  	return nil
    37  }
    38  
    39  func (s *StringStringMap) AsMap() map[string]string {
    40  	return *s
    41  }