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  }