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

     1  package config
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"strconv"
     7  
     8  	"go.starlark.net/starlark"
     9  )
    10  
    11  type boolSetting struct {
    12  	value bool
    13  	isSet bool
    14  }
    15  
    16  var _ configValue = &boolSetting{}
    17  var _ flag.Value = &boolSetting{}
    18  
    19  func (s *boolSetting) starlark() starlark.Value {
    20  	return starlark.Bool(s.value)
    21  }
    22  
    23  func (s *boolSetting) IsSet() bool {
    24  	return s.isSet
    25  }
    26  
    27  func (s *boolSetting) Type() string {
    28  	return "bool"
    29  }
    30  
    31  func (s *boolSetting) setFromInterface(i interface{}) error {
    32  	if i == nil {
    33  		return nil
    34  	}
    35  	v, ok := i.(bool)
    36  	if !ok {
    37  		return fmt.Errorf("expected %T, found %T", s.value, i)
    38  	}
    39  
    40  	s.value = v
    41  	s.isSet = true
    42  
    43  	return nil
    44  }
    45  
    46  func (s *boolSetting) Set(v string) error {
    47  	if s.isSet {
    48  		return fmt.Errorf("bool settings can only be specified once. multiple values found (last value: %s)", v)
    49  	}
    50  	b, err := strconv.ParseBool(v)
    51  	if err != nil {
    52  		return err
    53  	}
    54  	s.value = b
    55  	s.isSet = true
    56  	return nil
    57  }
    58  
    59  func (s *boolSetting) String() string {
    60  	return strconv.FormatBool(s.value)
    61  }