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 }