github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/value/optional.go (about) 1 package value 2 3 import ( 4 "fmt" 5 6 "go.starlark.net/starlark" 7 ) 8 9 // Unpack values that could be V or starlark.None 10 type Optional[V starlark.Value] struct { 11 IsSet bool 12 Value V 13 } 14 15 func (o *Optional[V]) Unpack(v starlark.Value) error { 16 if v == nil { 17 return nil 18 } 19 switch v := v.(type) { 20 case starlark.NoneType: 21 return nil 22 case V: 23 o.Value = v 24 o.IsSet = true 25 return nil 26 } 27 28 return fmt.Errorf("expected %T or None, got %T", o.Value, v) 29 }