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 }