72 lines
1.2 KiB
Go
72 lines
1.2 KiB
Go
package core
|
|
|
|
//go:generate go tool golang.org/x/tools/cmd/stringer -type=Tristate -output=tristate_stringer_generated.go
|
|
//go:generate go tool mvdan.cc/gofumpt -w tristate_stringer_generated.go
|
|
|
|
// Tristate
|
|
|
|
type Tristate byte
|
|
|
|
const (
|
|
TSUnknown Tristate = iota
|
|
TSFalse
|
|
TSTrue
|
|
)
|
|
|
|
func (t Tristate) IsTrue() bool {
|
|
return t == TSTrue
|
|
}
|
|
|
|
func (t Tristate) IsTrueOrUnknown() bool {
|
|
return t == TSTrue || t == TSUnknown
|
|
}
|
|
|
|
func (t Tristate) IsFalse() bool {
|
|
return t == TSFalse
|
|
}
|
|
|
|
func (t Tristate) IsFalseOrUnknown() bool {
|
|
return t == TSFalse || t == TSUnknown
|
|
}
|
|
|
|
func (t Tristate) IsUnknown() bool {
|
|
return t == TSUnknown
|
|
}
|
|
|
|
func (t Tristate) DefaultIfUnknown(value Tristate) Tristate {
|
|
if t == TSUnknown {
|
|
return value
|
|
}
|
|
return t
|
|
}
|
|
|
|
func (t *Tristate) UnmarshalJSON(data []byte) error {
|
|
switch string(data) {
|
|
case "true":
|
|
*t = TSTrue
|
|
case "false":
|
|
*t = TSFalse
|
|
default:
|
|
*t = TSUnknown
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (t Tristate) MarshalJSON() ([]byte, error) {
|
|
switch t {
|
|
case TSTrue:
|
|
return []byte("true"), nil
|
|
case TSFalse:
|
|
return []byte("false"), nil
|
|
default:
|
|
return []byte("null"), nil
|
|
}
|
|
}
|
|
|
|
func BoolToTristate(b bool) Tristate {
|
|
if b {
|
|
return TSTrue
|
|
}
|
|
return TSFalse
|
|
}
|